superagent-extend

0.1.6 • Public • Published

extend superagent

Installation

$ npm install superagent-extend

Execute sequence

request interceptors --> fetch start --> fetch end --> response interceptors --> response

API

parse

Parse function from description, Return a function. If method is get or delete, the return function arguments is query(object) and headers(object). Otherwise is data(object) and headers(object);

Arguments:

  • desc http request description. method url [interceptors]
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
seUtil.interceptors.logRequestUrl = function logRequestUrl(req) {
  console.info(req.url);
};
 
seUtil.interceptors.logFetchTime = function logFetchTime(res) {
  let performance = res.performance;
  console.info(performance.fetchEnd - performance.fetchStart);
};
 
// if an interceptor is response interceptor, use :name(:logFetchTime), the interceptor divide by ','
let fn = superagentExtend.parse('GET http://www.baidu.com/ logRequestUrl,:logFetchTime');
// query {"name": "vicanso"}, headers: {"X-UUID": "MY-UUID"}
fn({
  name: 'vicanso'
}, {
  'X-UUID': 'MY-UUID'
}).then(function(res) {
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});
 
 
let getUser = superagentExtend.parse('GET /user/:account');
// request /user/vicanso
getUser('vicanso').then(function(res) {
  assert.equal(res.status, 200);
}, function(err){
  console.error(err);
});
 

done

return promise wrap request end

'use strict';
const request = require('superagent-extend').request;
const assert = require('assert');
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.status, 200);
  // {"requestStart":1448633071310,"fetchStart":1448633071310,"requesting":0,"fetchEnd":1448633071356,"requestEnd":1448633071356,"use":46}
  console.info(JSON.stringify(res.performance));
}, function(err) {
  console.error(err);
});

res.performance:

  • performance.requestStart the timestamp of request start, before request interceptors execute .

  • performance.fetchStart the timestamp of fetch start, after request interceptors execute end.

  • performance.fetchEnd the timestamp of fetch end, before response interceptors execute.

  • performance.requestEnd the timestamp of request end, after response interceptors execute end.

  • performance.use time consuming of request(requestEnd - requestStart)

  • performance.requesting when fetch start, the requesting count

addReqIntc

Add global request interceptor. After all request interceptors execute end, the request start fetch.

If interceptor function return promise, it will be execute sequence.

Demo execute sequence is: logIn --> addQuery --> fetch start --> fetch end --> response

Arguments:

  • function interceptor function
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
// promise request interceptor
seUtil.addReqIntc(function logIn(req) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, 1000);
  });
});
 
// normal request interceptor
seUtil.addReqIntc(function addQuery(req) {
  req.url += '?name=vicanso';
});
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.req.path, '/?name=vicanso');
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

removeReqIntc

Remove global request interceptor.

Arguments:

  • function remove interceptor function. If no arguments, it will remove all interceptor function.
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
const loginInterceptor = function(req) {
  req.uuid = 'ABCD';
};
 
seUtil.addReqIntc(loginInterceptor);
 
// remove request interceptor
seUtil.removeReqIntc(loginInterceptor);
 
// remove all request interceptor
seUtil.removeReqIntc();

addResIntc

Add global response interceptor. After all response interceptors execute end, the response start.

If interceptor function return promise, it will be execute sequence.

Demo execute sequence is: fetch start --> fetch end --> logLongRequest --> response

Arguments:

  • function interceptor function
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
seUtil.addResIntc(function logMaxRes(res) {
  let length = res.text.length;
  if (length > 5 * 1024) {
    console.info('response data max than 5KB');
  }
});
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

removeResIntc

Remove global response interceptor.

Arguments:

  • function remove interceptor function. If no arguments, it will remove all interceptor function.
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
const logMaxRes = function(res) {
  let length = res.text.length;
  if (length > 5 * 1024) {
    console.info('response data max than 5KB');
  }
};
seUtil.addResIntc(logMaxRes);
 
// remove response interceptor
seUtil.removeResIntc(logMaxRes);
 
// remove all response interceptor
seUtil.removeResIntc();
 
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

timeout

Set request timeout.

Arguments:

  • ms timeout ms, default 0(no timeout).
'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
seUtil.timeout = 1;
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

addHeader

Add header for http request.

Arguments:

  • method http method, common header is use for all method.

  • header http request header.

'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
// set common header
seUtil.addHeader('common', {
  'X-Key': 'vicanso'
});
 
// set get header
seUtil.addHeader('get', {
  'X-Get-Key': 'vicanso'
});
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.req._headers['x-key'], 'vicanso');
  assert.equal(res.req._headers['x-get-key'], 'vicanso');
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

removeHeader

Remove header for http request.

Arguments:

  • method http method.

  • key http request header name. If !key, remove all header for the method.

'use strict';
const superagentExtend = require('superagent-extend');
const request = superagentExtend.request;
const seUtil = superagentExtend.util;
const assert = require('assert');
 
// set common header
seUtil.addHeader('common', {
  'X-Key': 'vicanso'
});
 
// set get header
seUtil.addHeader('get', {
  'X-Get-Key': 'vicanso'
});
 
// remove get x-get-key header
seUtil.removeHeader('get', 'x-get-key');
 
request('http://www.baidu.com/').done().then(function(res) {
  assert.equal(res.req._headers['x-key'], 'vicanso');
  assert.equal(res.status, 200);
}, function(err) {
  console.error(err);
});

License

MIT

Readme

Keywords

Package Sidebar

Install

npm i superagent-extend

Weekly Downloads

1

Version

0.1.6

License

MIT

Last publish

Collaborators

  • tree.xie