资讯专栏INFORMATION COLUMN

Node.js 教程第五篇——request

silencezwm / 858人阅读

摘要:一个第三方的模块,可用于发起或请求,可理解成服务端的请求。可用于代简单的服务器代理,用法和类似。在使用前需要先安装请求多参数设置请求支持和实现表单上传。常用多参数设置流

Request

一个第三方的模块,可用于发起 http 或 https 请求,可理解成服务端的 ajax 请求。可用于代简单的服务器代理,用法和 ajax 类似。

在使用前需要先安装 npm install request --save

GET 请求
request.get("https://cnodejs.org/api/v1/topics?page=1&limit=10", (error, response, body) => {
    console.log(body)
})
//or
request("https://cnodejs.org/api/v1/topics?page=1&limit=10", (error, response, body) => {
    console.log(body)
})
多参数设置
exports.get = function(url, options) {
    options = options || {};
    var httpOptions = {
        url: url,
        method: "get",
        timeout: options.timeout || 10000,
        headers: options.headers || default_post_headers,
        proxy: options.proxy || "",
        agentOptions: agentOptions,
        params: options.params || {}
    }
    if(options.userAgent){
        httpOptions.headers = {
            "User-Agent": userAgents[options.userAgent],
        }
    }

    try{
        request.get(httpOptions, function(err, res, body) {
            if (err) {
                options.callback({status: false, error: err})
            } else {
                options.callback({status: res.statusCode == 200, error: res, data: body})
            }
        }).on("error", logger.error);
    } catch(err){
        console.log("http error");
    }
}
POST 请求

request支持application/x-www-form-urlencoded和multipart/form-data实现表单上传。

application/x-www-form-urlencoded (URL-Encoded Forms)
request.post("http://service.com/upload", {form:{key:"value"}})
// or
request.post("http://service.com/upload").form({key:"value"})
// or
request.post({url:"http://service.com/upload", form: {key:"value"}}, function(err,httpResponse,body){ /* ... */ })
multipart/form-data (Multipart Form Uploads)
var formData = {
  // Pass a simple key-value pair
  my_field: "my_value",
  // Pass data via Buffers
  my_buffer: new Buffer([1, 2, 3]),
  // Pass data via Streams
  my_file: fs.createReadStream(__dirname + "/unicycle.jpg"),
  // Pass multiple values /w an Array
  attachments: [
    fs.createReadStream(__dirname + "/attachment1.jpg"),
    fs.createReadStream(__dirname + "/attachment2.jpg")
  ],
  // Pass optional meta-data with an "options" object with style: {value: DATA, options: OPTIONS}
  // Use case: for some types of streams, you"ll need to provide "file"-related information manually.
  // See the `form-data` README for more information about options: https://github.com/form-data/form-data
  custom_file: {
    value:  fs.createReadStream("/dev/urandom"),
    options: {
      filename: "topsecret.jpg",
      contentType: "image/jpeg"
    }
  }
};
request.post({url:"http://service.com/upload", formData: formData}, function optionalCallback(err, httpResponse, body) {
  if (err) {
    return console.error("upload failed:", err);
  }
  console.log("Upload successful!  Server responded with:", body);
});
常用多参数设置
exports.form_post = function(url, postdata, options) {
    // console.log(`${moment().format()} HttpFormPost: ${url}`)
    return new Promise((resolve, reject) => {
        options = options || {};
        var httpOptions = {
            url: url,
            form: postdata,
            method: "post",
            timeout: options.timeout || 3000,
            headers: options.headers || default_post_headers,
            proxy: options.proxy || "",
            agentOptions: agentOptions
        };
        request(httpOptions, function(err, res, body) {
            if (err) {
                reject(err);
            } else {
                if (res.statusCode == 200) {
                    resolve(body);
                } else {
                    reject(res.statusCode);
                }
            }
        }).on("error", logger.error);
    });
};
request("http://img.zcool.cn/community/018d4e554967920000019ae9df1533.jpg@900w_1l_2o_100sh.jpg").pipe(fs.createWriteStream("test.png"))
request("https://cnodejs.org/api/v1/topics?page=1&limit=10").pipe(fs.createWriteStream("cnodejs.json"))

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94274.html

相关文章

  • Java3y文章目录导航

    摘要:前言由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 前言 由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 由于更新比较频繁,因此隔一段时间才会更新目录导航哦~想要获取最新原创的技术文章欢迎关注我的公众号:Java3y Java3y文章目录导航 Java基础 泛型就这么简单 注解就这么简单 Druid数据库连接池...

    KevinYan 评论0 收藏0
  • 「Odoo 基础教程系列」五篇——从 Todo 应用开始(4)

    摘要:在前面教程中,我们使用了两种类型的视图和今天我们将学习使用另一种类型的视图搜索视图。大家可以试试看同时应用多个分组,或者将分组和过滤器组合使用,仔细观察和思考产生的结果。还是老规矩,教程中的代码会更新在仓库中。 showImg(https://segmentfault.com/img/bVbgO85?w=1950&h=1300); 在前面教程中,我们使用了两种类型的视图——TreeVi...

    xiyang 评论0 收藏0
  • SpringBoot非官方教程 | 五篇:SpringBoot整合 beatlsql

    摘要:整合阶段由于没有对的快速启动装配,所以需要我自己导入相关的,包括数据源,包扫描,事物管理器等。另外它的中文文档比较友好。源码下载参考资料中文文档 BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。 beatlsql 优点 开发效率 无需注解,自动使用大...

    microelec 评论0 收藏0
  • 工具集核心教程 | 五篇: 利用Velocity模板引擎生成模板代码

    摘要:欢迎关注我的微信公众号获取更多更全的学习资源,视频资料,技术干货公众号回复学习,拉你进程序员技术讨论群,干货资源第一时间分享。公众号回复全栈,领取前端,,产品经理,微信小程序,等资源合集大放送。公众号回复面试,领取面试实战学习资源。 前言 不知道大家有没有这样的感觉,在平时开发中,经常有很多dao、service类中存着很多重复的代码,Velocity提供了模板生成工具,今天我教大家怎...

    leon 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<