跳至主要内容

[note] superagent 筆記

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);
});