在Node.js中,HTTP请求通常包含两个主要部分:请求头和请求体。其中,请求头包含一些元数据信息,如用户代理、内容类型等;而请求体则是实际的数据负载。
在处理HTTP请求时,我们经常需要从这两个部分中获取参数或数据。其中,body和query就是两种常见的获取方式。
1. body
body指的是HTTP请求体中携带的数据。它通常用于POST、PUT等方法提交表单或JSON格式的数据。
在Node.js中,我们可以使用第三方模块如`body-parser`来解析HTTP请求体,并将其转换为JavaScript对象或数组。例如:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 解析 application/x-www-form-urlencoded 格式
app.use(bodyParser.urlencoded({ extended: false }));
// 解析 application/json 格式
app.use(bodyParser.json());
app.post('/login', (req, res) => {
const { username, password } = req.body;
// 处理登录逻辑...
});
上面代码中,我们通过调用`bodyParser.urlencoded()`和`bodyParser.json()`方法来解析不同格式的HTTP请求体,并将其挂载到Express应用程序上下文中(即req.body)。
2. query
query指的是URL查询字符串(即问号后面跟着的键值对)。它通常用于GET方法传递参数。
在Node.js中,我们可以使用内置模块如`url`来解析URL,并从其中提取查询字符串参数。例如:
const http = require('http');
const url = require('url');
http.createServer((req, res) => {
const { query } = url.parse(req.url, true);
const { name } = query;
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(`Hello ${name}!`);
}).listen(8080);
上面代码中,在创建服务器时我们使用了内置模块url来解析URL并提取查询字符串参数(即name),然后将其作为响应返回给客户端。
总结
- body指HTTP请求体携带的数据,在处理POST、PUT等方法提交表单或JSON格式数据时经常使用。
- query指URL查询字符串,在处理GET方法传递参数时经常使用。
- 在Node.js中可以通过第三方模块如`body-parser`和内置模块如`url`来解析HTTP请求体和URL,并从其中提取所需信息。