Node.js 发起HTTP请求的5种方式

HTTP(百度百科):   超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;

1.Node 标准库内置了默认的 http 模块

        可以直接用这个模块来发起 HTTP 请求。但是开发起来较为麻烦。同时因为该库不能使用 HTTP 请求的异步/等待功能,所以我们还需要为分块数据使用异步流,然后再去手动解析响应数据。


const https = require('https')

https.get(' ', res => {

    let data = '';

    res.on('data', chunk => {
        data+=chunk;
    });

    res.on('end', () => {
        console.log(JSON.parse(data));
    });

}).on('error', err => {
    console.log('Error: ', err.message);
});

2.axios

        Axios,是一个基于 promise 的网络请求库,作用于 node.js 和浏览器中。在服务端它使用原生node.js http模块, 而在客户端 (浏览端) 则使用XMLHttpRequest

        1.常用配置项

请求地址url: '/user' 
请求类型method 
请根路径baseURL:http://www.mt.com/api
请求前的数据处理transformRequest:[function(data){}]
请求后的数据处理transformResponse: [function(data){}]
自定义的请求头headers:{' ’}
URL查询对象params:{ id: 12 },
查询对象序列化函数paramsSerializer: function(params){}
request bodydata: {  key: 'ace' }
超时设置timeout: 1000,
跨域是否带Token: withCredentials: false
身份验证信息auth:[ uname:' ', pwd:'12'}
响应的数据格式json /blob /document /arraybuffer /text/ stream: responseType:’json'

        2.params与get请求配合使用的。而data是与post请求配合使用的

//post 方法
axios({
  method: 'post',
  url: '/base/post',
  data: {
    a: 1,
    b: 2
  }
})

//get 方法
axios({
  method: 'get',
  url: '/base/get',
  params: {
    foo: {
      bar: 'baz'
    }
  }
})

        用例 :发起 get 请求

const axios = require('axios');

// 向给定ID的用户发起请求
axios.get('/user?ID=12345')
  .then(function (response) {
    // 处理成功情况
    console.log(response);
  })
  .catch(function (error) {
    // 处理错误情况
    console.log(error);
  })
  .then(function () {
    // 总是会执行
  });

// 上述请求也可以按以下方式完成(可选)
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // 总是会执行
  });  

// 支持async/await用法
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

                ① Axios发送请求时params和data的区别

                params:会将参数加到 url 后面,和请求地址一起发送。传递的都是字符串。无法传递参数中含有json格式的数据。

                data :是添加到请求体(body)中(数据可以是 json 格式),作为一个请求体来发送。

        3.axios常用方法

在这里插入图片描述

         4.axios 特性

                ①从浏览器中创建XMLHttpRequest

                ②node.js创建http请求

                ③支持Promise API

                ④支持拦截请求和响应

                ⑤转换请求数据和响应数据

                ⑥取消请求

                ⑦可以自动转换将响应为JSON格式

                ⑧客户端支持防止CSRF

        5.和 ajax 区别

                ①axios通过Promise实现ajax技术的一种封装,不用设置回调,直接调用then方法。

                        (传统 Ajax 指的是 XMLHttpRequest(XHR), 核心是使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱

                ②axios返回的数据是一个promise,ajax返回的数据是回调

                ③axios比ajax更加好用,更加安全

3.superagent

        SuperAgent是一个基于Promise的轻量级渐进式的AJAX API,非常适合发送HTTP请求和接收服务器响应,是轻量级且更为优化的AJAX API,可用来处理GET、POST、PUT、DELETE、HEAD等请求,并支持绝对路径、链式调用等。

        SuperAgent有两个实现,一个是给浏览器使用的是浏览器原生对象XmlHttpRequest对象,一个是给Node.js使用的是核心的HTTP模块。

        superagent用法与axios十分的相似,但是需要去自己把数据处理成json格式。

4.node-fetch

        node-fetch是一个Node.js的模块,用于从远程服务器获取数据。它提供了一些方便的方法来从远程服务器获取数据,包括HTTP GET请求、POST请求、PUT请求和DELETE请求。

5.got

        got 是 Node.js 的另一个直观而强大的 HTTP 请求库。,不同于 axios 和 superagent,got 不会默认解析 JSON。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值