• [Web 前端] superagent-nodejs处理请求的模块


    cp from : https://blog.csdn.net/xiao_chun5316/article/details/48164435

    关于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: '25', 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-typeapplication/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请求,以及返回数据,其实还是之前接触的少,熟练了就不会被卡住了。
  • 相关阅读:
    Kbuild文件
    patch与diff的恩怨
    依据linux Oops信息准确定位错误代码所在行
    理解嵌入式开发中的一些硬件相关的概念
    linux内核中经常用到的设备初始化宏
    如何实例化i2c_client(四法)
    设计和编写设备驱动的一般方法
    [转] rtp h264注意点(FU-A分包方式说明)
    c语言的label后面不能直接跟变量申明
    互联网目前最有影响力的流量统计网站
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/9147196.html
Copyright © 2020-2023  润新知