1.0.6 • Published 4 years ago

nivedan v1.0.6

Weekly downloads
13
License
MIT
Repository
github
Last release
4 years ago

nivedan

npm version

Promise based HTTP client for the browser and node.js

Features

  • Make XMLHttpRequests from the browser
  • Make http requests from node.js
  • Supports the Promise API
  • middleware request and response
  • Transform request and response data
  • Run time middleware
  • Automatic transforms for JSON data
  • Rollbar Error tracking
  • Error expend Error with details
  • React Hooks
  • Event Emitter
  • Client side support for protecting against XSRF

Browser Support

ChromeFirefoxSafariOperaEdgeIE
Latest ✔Latest ✔Latest ✔Latest ✔Latest ✔11 ✔

Installing

Using npm:

$ npm install nivedan

Using bower:

$ bower install nivedan

Using yarn:

$ yarn add nivedan

Example

nodejs usage

const nivedan = require('nivedan');

nivedan
	.get('/url')
	.then(function (response) {
		// handle success
		console.log(response);
	})
	.catch(function (error) {
		// handle error
		console.log(error);
	});

// Get request with query parameters

nivedan
	.get('/url', {
		params: {
			key: value,
		},
	})
	.then(function (response) {
		// handle success
		console.log(response);
	})
	.catch(function (error) {
		// handle error
		console.log(error);
	});

// Modern browser request with async and await
// with async await always used the try catch for error handling

async const method = () => {
	try {
		const response = await nivedan.get('/url');
		console.log(response);
	} catch (error) {
		console.error(error);
	}
}

// handle the multiple request togather. Its similar like promise.all
nivedan
	.resolve([nivedan.get('/url'), nivedan.get('/url')])
	.then(function (response) {
		console.log(response);
	})
	.catch(function (error) {
		console.log(error);
	});

// if you want to expand the nivedan.resolve result then use the nivedan.expend

nivedan
	.resolve([nivedan.get('/url'), nivedan.get('/url')])
	.then(
		nivedan.expand(function (acct, perms) {
			// Both requests are now complete
		})
	);

Request method aliases

// you will send array or parameter

nivedan.request(config)
nivedan.get(url, config)
nivedan.delete(url, config)
nivedan.head(url, config)
nivedan.options(url, config)
nivedan.post(url[, data, config])
nivedan.put(url[, data, config])
nivedan.patch(url[, data, config])
NOTE

When using the alias methods url, method, and data properties don't need to be specified in config.

// Set the default common configuration for all requests

nivedan.defaultConfig({
	baseURL: 'https://something.com/apis/v2',
	headers: {
		common: { 'Content-Type': 'application/json' },
	},
	timeout: 0,
});

// config the rollbar error tracking

nivedan.defaultConfig({
	rollbarToken: '',
	rollbarConfig: {
		status: [403, 500], // track particular http error code in rollbar otherwise it will track all error code and exception
	},
});

// config the errorExpend
// without errorExpend you will get the error response regular erros

//The response for a request contains the following information.
.catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened wrong in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

nivedan.defaultConfig({
	errorExpand: true,
});
// after the config you will get

{
  clientError: true,
  errorDetails: {
    code: 403,
    success: false,
    error_message: 'This email account does not exist',
    body: []
  },
  message: 'Forbidden',
  serverError: false,
  status: 403
}

// if you want the message key from server side message so just add the
nivedan.defaultConfig({
    errorExpand: true,
    errorMessageKey: 'error_message' // key from server side which sended by the backend developer with message
});
// and result will be
{
  clientError: true,
  errorDetails: {
    code: 403,
    success: false,
    error_message: 'This email account does not exist',
    body: []
  },
  message: 'This email account does not exist',
  serverError: false,
  status: 403
}

Middleware

You can middleware requests or responses before they are handled by then or catch.

// Request middleware

nivedan.middleware.request.use(
	function (config) {
		config.headers.common['Authorization'] = 'key';
		return config;
	},
	function (error) {
		Promise.reject(error);
	}
);

// Response middleware
const successResponse = (response) => {
	// do something
	return response;
};
nivedan.middleware.response.use(
	(response) => successResponse(response),
	(error) => Promise.reject(error)
);

Additional middleware

You can run middlware before requests or responses middleware calling

When user want to do something before server requests

const checkStatus = (config, next) => {
	// todo
	next();
};
const allTaskDone = (config, next) => {
	// todo
	next();
};
nivedan.use([checkStatus, allTaskDone]);

Note: you will not modify the config in the additional middleware.

New instance

const request = nivedan.createInstance({
	baseURL: '',
});
// You can add middleware to a custom instance of nivedan.
request.middleware.request.use(function () {
	/*...*/
});

Handling Errors

nivedan.get('/user/12345').catch(function (error) {
	if (error.response) {
		// The request was made and the server responded with a status code
		// that falls out of the range of 2xx
		console.log(error.response.data);
		console.log(error.response.status);
		console.log(error.response.headers);
	} else if (error.request) {
		// The request was made but no response was received
		// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
		// http.ClientRequest in node.js
		console.log(error.request);
	} else {
		// Something happened in setting up the request that triggered an Error
		console.log('Error', error.message);
	}
	console.log(error.config);
});

Using Expend you get an object with more information about the HTTP error.

nivedan.get('/user/12345').catch(function (error) {
	console.log(error.Expend());
});

Using application/x-www-form-urlencoded format

By default, nivedan serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

nivedan emitter

nivedan.emit('eventName', 'something');
nivedan.on('eventName', (data) => {
	console.log(data);
	// output  something
});
nivedan.get('/someurl').then(function (data) {
	nivedan.emit('eventName', data);
});
nivedan.on('eventName', (data) => {
	console.log(data);
});

nivedan global error listener

// if any error occur in the request and file so every error listen in nivedan listener
nivedan.on('error', (err) => {
	console.log(err);
});

nivedan additional config

nivedan.setConfig('s3-aws', {
	bucket: 'something',
});
nivedan.getConfig('s3-aws');
nivedan.removeConfig('s3-aws');
nivedan.getAllConfig;

License

MIT

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago