superagent-nodejs处理请求的模块

本文介绍Superagent的基础使用方法,包括GET、POST等请求方式,如何设置头部信息、处理查询参数及上传文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



关于superagent,这次写react组件,发送请求都用的superagent,这里分享一下基本使用方法以及遇到的问题。服务器端客户端都可以用,很方便。
它是为nodejs里一个比较方便的客户端请求代理模块。可以处理get,post, put, delete, head等请求,支持绝对路径,支持链式调用。

1. 请求基础
request对象,请求方式,参数设置,最后end(callback)结尾。
super agent遇到end才真正发出请求。

以一个简单的GET request为例(默认请求方式为get)
request.get(‘/detail')
           .end(function(err,res){     
           // …发起请求后的回调处理
});
请求方法可以通过参数来传递:
request(‘GET’, ‘/detail’).end(callback);
其他请求方式,POST,HEAD,等等都可以用,注意delete由于是保留字,所以调用时应该用 del(‘detail')

2. 设置头字段
使用set(’name’, ‘value’)即可,如果想同时设置多个,可以直接传递一个对象进来,例子如下:
request
   .post('/search')
   .set({ 'API-Key': 'foobar', Accept: 'application/json' })
   .end(callback);
可以看到请求头部如下:


3. 关于get 请求
.query( )形成query-string,方式的话,有三种
a. 连续写多个.query()
b. 请求放在一个对象里
c. 完全query字符串形式
d. 字符串拼接
例子:
request
  .get('/search')
.query({ query: 'Manny' })
.query({ range: '1..5' })
.query({ order: 'desc' })
  .end(function(res){
  });
or  . query ({  name :  ' Mary ,  age :  '2 5' ,  order :   'desc'   });
.query('name=Mary&age=25&order=desc’);
.query('name=Mary’)
.query('age=25')
.query(‘order=desc')


4.关于post请求
发送post,设置合适的Content-type,写入一些数据,end
由于json比较通用,作为默认的content-type值。
a. 例子如下:
request.post('/user')
    .set('Content-Type', 'application/json')
    .send('{"name":"tj","pet":"tobi"}')
b. 也支持form格式,
 设置:
request. post('/user')
     .type('form')
     .send({name: 'mary' })
如果在post情况下,发送字符串的话,将 设置 Content-type application/x-www-form-urlencoded
例子:
.send('name=tj')
.send('pet=tobi')
请求会这样:

上面两种结果是一样的。

5. 可以设置接收类型
关键字:accept
request.get('/user')
   
.accept('application/json')

6. 支持文件上传
nodejs 客户端通过 Formidable 模块来支持 multipart/form-data 类型,当解析一个 multipart 响应时, res.files 属性就可以用,可以获取file的路径,内容,等等

7.可以用field支持多种类型数据上传
在http请求中,可以看到这些数据是放在request payload部分的,
使用方法:
.field('name', value);

8.attach
添加多个附件也比较简单,只需要给附件提供自定义的文件名称,同样的基础名称也要提供.
.attach(name, [path], [filename])
9. piping 管道数据
使用请求流来输送数据,请求一个文件作为输出流,或者发送一个响应流到文件中。
var request = require('superagent')
  , fs = require('fs');

var stream = fs.createReadStream('path/to/my.json');
var req = request.post('/somewhere');
req.type('json');
stream.pipe(req);

var request = require('superagent')
 
, fs = require('fs');

var stream = fs.createWriteStream('path/to/my.json');
var req = request.get('/some.json');
req.pipe(stream);

10.response
如果有err返回,那就有两个参数,一般只有一个res。
res格式:


当产生一个4xx或者5xx的http错误响应, res.error 提供了一个错误信息的对象。正常情况下,返回的数据在res.body中,可以进一步处理。

这次写组件,遇到的主要问题就是,传递的参数格式不正确,以及对res对象属性的错误调用,好好查看http请求,以及返回数据,其实还是之前接触的少,熟练了就不会被卡住了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值