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