[note] superagent 筆記
- 測試使用 @ jsfiddle
SuperAgent 基本使用
- .set({key: value}): Request Header。
- .type('<string>'): Request Type。
- .send({key: value}): Request body。
- .accept('<string>'): Accept Type。
- .query({key: value}): query string (url ? 後面的內容)
- .field('<name>', '<value>'): 可以用來作為 HTML 的- form傳送。
- .attach('<fileType>', '<filePath>'): 可以用來傳送資料。
request
  .post('<url>')
  .set('Accept', 'application/json')
  .set('Content-Type', 'application/json')
  // .accept('application/json')
  // .type('application/json')
  .query({ userId: 1 })
  .send({ color: ['red', 'blue'] }) // color=red&color=blue
  .attach('file', 'path/to/jane.png')
  .field('friends[]', ['loki', 'jane'])
  .end('callback<err, res>');
GET
/**
 *  Make a GET request
 **/
// This will send GET request "https://jsonplaceholder.typicode.com/posts?userId=1"
request
  .get(root + '/posts')
  .set({ 'API-Key': 'foobar', Accept: 'application/json' })
  .query({ userId: 1 })
  .end('callback<err, res>');
// ES6 Promise is supported
request
  .get(root + '/posts/1')
  .set('Accept', 'application/json')
  .then(
    // Resolve Callback
    (value) => console.log(value),
    // Reject Callback
    (reason) => console.log('Reject: ' + reason),
  );
POST
request
  .post(root + '/posts/')
  .send({ name: 'tj', pet: 'tobi' })
  .type('form')
  .attach('avatar', 'path/to/tobi.png', 'user.png')
  // .attach('file', 'path/to/jane.png')
  .field('user[name]', 'Tobi')
  // .field('friends[]', ['loki', 'jane'])
  .end('callback<err,res>');
SuperAgent Plugin
SuperAgent Throttle
可以用來管理一次送出 request 的數量和速度
const request = require('superagent');
const Throttle = require('superagent-throttle');
let throttle = new Throttle({
  active: true, // 是否讓 queue 暫停(預設是 true,false 則是不暫停)
  rate: 40, // 每 'ratePer' 可以送出多少(預設:40)
  ratePer: 1000, // 可以發送 'rate' 請求的 ms 數(預設:40000)
  concurrent: 20, // 一次可以同時送出多少 requests (預設:20)
})
  .on('sent', (request) => console.log(`sent request, ${new Date().toString()}`))
  .on('received', (request) => console.log(`received request, ${new Date().toString()}`))
  .on('drained', () => console.log('drained', '當所有 request 結束時觸發'));
let testUrl = 'https://jsonplaceholder.typicode.com';
request
  .get(testUrl)
  .use(throttle.plugin())
  .end(function (err, res) {
    if (err) {
      console.log('err', err);
    }
    console.log('res', res.statusCode);
  });