http模块(二)

method的处理

在Restful规范(设计风格)中,我们对于数据的增删改查应该通过不同的请求方式:

       GET:查询数据;

       POST:新建数据;

       PATCH:更新数据;

       DELETE:删除数据;

所以,我们可以通过判断不同的请求方式进行不同的处理。

       比如创建一个用户:

       请求接口为 /users;

       请求方式为 POST请求;

       携带数据 username和password;

创建用户接口

在我们程序中如何进行判断以及获取对应的数据呢?

       这里我们需要判断接口是 /users,并且请求方式是POST方法去获取传入的数据;

       获取这种body携带的数据,我们需要通过监听req的 data事件来获取;

req.setEncoding('utf-8');

req.on('data', (data) => {
  const { username, password } = JSON.parse(data);
  console.log(username, password);
})

req.on('end', () => {
  console.log("传输结果");
});

res.end("creat user success");

将JSON字符串格式转成对象类型,通过JSON.parse方法即可。

headers属性

在request对象的header中也包含很多有用的信息,客户端会默认传递过来一些信息:

{
  'content-type': 'application/json',
  'user-agent': 'PostmanRuntime/7.26.5',
  accept: '*/*',
  'postman-token': 'afe4b8fe-67e3-49cc-bd6f-f61c95c4367b',
  host: 'localhost:8000',
  'accept-encoding': 'gzip,deflate,br',
  connection: 'keeep-alive',
  'content-length': '48'
}

content-type是这次请求携带的数据的类型:

       application/json表示是一个json类型;

       text/plain表示是文本类型;

       application/xml表示是xml类型;

       multipart/form-data表示是上传文件;

content-length:文件的大小和长度

◼ keep-alive:

       http是基于TCP协议的,但是通常在进行一次请求和响应结束后会立刻中断;

       在http1.0中,如果想要继续保持连接:

              ✓ 浏览器需要在请求头中添加 connection: keep-alive;

              ✓ 服务器需要在响应头中添加 connection:keey-alive;

               ✓ 当客户端再次放请求时,就会使用同一个连接,直接一方中断连接;

       在http1.1中,所有连接默认是 connection: keep-alive的;

              ✓ 不同的Web服务器会有不同的保持 keep-alive的时间;

              ✓ Node中默认是5s中;

accept-encoding:告知服务器,客户端支持的文件压缩格式,比如js文件可以使用gzip编码,对应 .gz文件;

accept:告知服务器,客户端可接受文件的格式类型;

user-agent:客户端相关的信息;

返回响应结果

如果我们希望给客户端响应的结果数据,可以通过两种方式:

       Write方法:这种方式是直接写出数据,但是并没有关闭流;

       end方法:这种方式是写出最后的数据,并且写出后会关闭流;

// 响应数据的方式有两个:
res.write("Hello World");
res.write("Hello Response");
res.end("message end");

如果我们没有调用 end和close,客户端将会一直等待结果:

       所以客户端在发送网络请求时,都会设置超时时间。

返回状态码

Http状态码(Http Status Code)是用来表示Http响应状态的数字代码:

       Http状态码非常多,可以根据不同的情况,给客户端返回不同的状态码;

       常见的状态码是下面这些(后续项目中,也会用到其中的状态码);
在这里插入图片描述
设置状态码常见的有两种方式:

res.statusCode = 400;
res.writeHead(200);

响应头文件

返回头部信息,主要有两种方式:

       res.setHeader:一次写入一个头部信息;

       res.writeHead:同时写入header和status;

res.setHeader("Content-Type","application/json;charset=utf8");
res.writeHead(200,{
  "Content-Type":"application/json;charset=utf8"
})

Header设置 Content-Type有什么作用呢?

       默认客户端接收到的是字符串,客户端会按照自己默认的方式进行处理;
在这里插入图片描述
http请求

axios库可以在浏览器中使用,也可以在Node中使用:

       在浏览器中,axios使用的是封装xhr;

       在Node中,使用的是http内置模块;

http.get("http://localhost:8000", (res) => {
  res.on('data', data => {
    console.log(data.toString());
    console.log(JSON.parse(data.toString()));
  })
});
const req = http.request({
  method: 'POST',
  hostname: "locaihost",
  port:8000
},(res) => {
  res.on('data', data => {
    console.log(data.toString());
    console.log(JSON.parse(data.toString()));
  })
  req.end();
})
const axios = require('axios')
// get请求
axios
  .get(http://localhost:8080)
  .then(res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值