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)