PJCHENder 未整理筆記

[Note] SuperAgent 學習筆記

2017-09-25

[Note] SuperAgent 學習筆記

@(NodeJS)[npm, package]

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>'): 可以用來傳送資料。
1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 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

1
2
3
4
5
6
7
8
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 的數量和速度

官方文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
})

掃描二維條碼,分享此文章