美文网首页
nodejs写请求

nodejs写请求

作者: 尤樊容 | 来源:发表于2018-11-05 16:43 被阅读18次

    使用nodejs请求可以达到很多javascript请求达不到的目的,所以总结了几个请求,包括:原生 http,request,axios,flyio。

    request

    nodejs的常用模块,我这里只写了一个结构,并没有分开说细节,但是一般要用到的这里都有啦!要是大神们有什么补充,我也是万分感谢呀!

    var request = require('request');
    //需要传递的参数
    const data = {
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3',
      'keyn': 'value4',
    }
    
    //json格式转换
    function obj2String(obj, arr = [], idx = 0) {
      for (let item in obj) {
        arr[idx++] = [item, obj[item]]
      }
      return new URLSearchParams(arr).toString()
    }
    
    var options = {
        url: 'url',//请求的URL
        method: "POST",//or GET 请求方式
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'Referer': 'XXXX'
        },
    /*
    这里需要转换主要是因为
    写了 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    如果写 'body: JSON.stringify(data)',那么'Content-Type'应该为'application/json',
    后面的例子是第二种方式
    */
        body: obj2String(data)
    };
    
    function callback(error, response, body) {
        console.log(response.statusCode);
        if (!error && response.statusCode == 200) {
            var info = JSON.parse(body);//2 json
            console.log(info.output);
        }
    }
    
    request(options, callback);
    

    原生 http

    const http = require("http");
    const options = {
      host: "url", //此处不能写协议(https://),否则会报错
      port: 80,
      path: "/XXX",//路由
      method: "POST",//or GET
      headers: {//根据需要写
        "Content-Type": "application/json",
        "Referer": "XXX"
      }
    };
    // const data = `key1=value1&key2=value2`;
    const data = {
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3',
      'keyn': 'valuen',
    }
    const req = http.request(options, function(res) {
      res.setEncoding("utf8");
      const chunks = [];
      res.on("data", chunk => {
        chunks.push(chunk);
      });
      res.on("end", () => {
        console.log(chunks);
      });
    });
    req.on("error", function(e) {
      console.log("problem with request: " + e.message);
    });
    req.write(JSON.stringify(data));
    req.end();
    

    axios

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

    var axios = require("axios");//使用之前需要npm install axios
    const data = {
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3',
      'keyn': 'valuen',
    }
    
    axios({
      method: "post",//or get
      url: "url",
      headers: {
        "Content-Type": "application/json",
        "Referer": "XXXX"
      },
      data: JSON.stringify(data)
    })
    .then(function(response) {
      console.log(response.data);
    })
    .catch(function(error) {
      console.log(2222222);
    });
    

    flyio

    一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用。
    目前Fly.js支持的平台包括:Node.js微信小程序WeexReact NativeQuick App 和浏览器,这些平台的 JavaScript 运行时都是不同的
    文档地址:https://wendux.github.io/dist/#/doc/flyio/readme

    在浏览器环境下,一个库的大小是非常重要的。这方面 Fly 做的很好,它在保持强大的功能的同时,将自己的身材控制到了最好。min 只有 4.6K 左右,GZIP 压缩后不到 2K,体积是 axios 的四分之一。

    //别忘了安装 npm install flyio
    const fly=require("flyio")
    
    const data = {
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3',
      'keyn': 'valuen',
    }
    
    fly.post(url, JSON.stringify(data), {headers:{
      "Content-Type": "application/json",
      "Referer": "XXXXXX"
    }})
    .then(function (response) {
      console.log(response.data);
    })
    .catch(function (error) {
      console.log(error);
    });
    

    以上是这四种方法的简单使用,关于类似的用法还希望大家补充!

    相关文章

      网友评论

          本文标题:nodejs写请求

          本文链接:https://www.haomeiwen.com/subject/zmlseftx.html