NodeJS

发布时间 2023-06-10 17:02:48作者: MARSHBAN

请求报文和请求对象

请求报文和请求对象是相关但不完全相同的概念。

  • 请求报文是在 HTTP 协议中定义的一种格式化的数据结构,用于客户端向服务器发送请求。它包含了请求行、请求头和请求体等部分,用于描述请求的相关信息和携带数据。

  • 请求对象是在服务器端处理请求时,根据请求报文构建的一个对象,表示客户端发送的请求信息。在 Node.js 或其他服务器端框架中,请求对象通常由服务器框架提供,并包含了请求报文的各个部分的解析和封装。

一次 HTTP 传输解析

创建一个后台服务对象

const http = require('http');

const server = http.createServer((request, response) => {
  // magic happens here!
});

当一个 HTTP 到达服务端,node 调用 request 处理程序,并产生一些唾手可得的对象用以处理传输,这些对象就是 request 和 response。

request 对象是一个IncomingMessage实例。
response 对象是一个ServerResponse实例

方法、访问地址和请求头

当处理一个请求时,第一件事你需要做的是看一下这个方法和其访问地址,以此决定你到底采取何种合理的行为。
const { method, url } = request;

请求头也不是很难得到,它们也在 request 对象里,称为 headers。
const { headers } = request;

示例:处理GET请求

创建一个后台服务,发送GET请求,解析url中的参数

const http=require('http');
//nodejs中的查询字符串模块
const querystring=require('querystring');

const server = http.createServer((req,res)=>{
    const {method,url,headers}=req;
    console.log('method',method);
    console.log('url',url);
    console.log('headers',headers);

    //获取url传递的参数
    req.query=querystring.parse(url.split('?')[1]);//querystring.parse() 方法将网址查询字符串 (str) 解析为键值对的集合。赋值给新增属性req.query中
    console.log('query',req.query);
    res.end(
        JSON.stringify(req.query)//JavaScript JSON.stringify()方法用于将 JavaScript 值(通常为对象或数组)转换为 JSON 字符串。
    )
});

server.listen(5000,()=>{
    console.log('server running at port 5000');
})

服务启动后,使用Postman发送一个GET请求:

服务端结果: