express.json() 作用
让我们能够通过 request.body 拿到请求体中 json 格式的数据。
express.json() 用于解析客户端发送的 JSON 格式的请求体数据,将其转换为 JavaScript 对象,并将其赋值给 req.body。
通常用于处理客户端通过 AJAX 发送的请求。
如果不使用这个中间件,我们也可以手动处理请求体 body 中的数据,只不过比较麻烦。
const express = require('express');
const app = express();
app.post('/users', (req, res) => {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString();
});
req.on('end', () => {
try {
const data = JSON.parse(body);
// 处理请求数据...
res.send('User created successfully');
} catch (error) {
res.status(400).send('Invalid JSON format');
}
});
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
express.urlencoded({ extended: true }) 作用
解析客户端发送的 URL 编码格式的请求体数据,将其转换为 JavaScript 对象,并将其赋值给 req.body。
通常用于处理通过表单提交的请求。
它长这样:
<form action="/submit-form" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" />
<label for="email">Email:</label>
<input type="email" id="email" name="email" />
<label for="message">Message:</label>
<textarea id="message" name="message"></textarea>
<input type="submit" value="Submit" />
</form>
POST /example HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
name=John%20Doe&age=30&email=john%40example.com
在上面的请求体中,name 的值是 John Doe,age 的值是 30,email 的值是 john@example.com。
其中,空格被编码为 %20,@ 被编码为 %40。
({ extended: true }) 的作用是处理深层嵌套对象。
express.json 和 express.urlencoded 相同点
都将请求体数据解析为 JavaScript 对象,并将其赋值给 req.body。
什么是 URL 编码
URL 编码只对特殊字符编码,普通的字母、数字、大部分符号不转译。
为什么不直接使用 ASCII 码,因为这样会导致不够直观,清晰,容易引起混淆。
字符 | ASCII 码 | URL 编码 |
---|---|---|
空格 | 32 | %20 |
& | 38 | %26 |
= | 61 | %3D |
# | 35 | %23 |
+ | 43 | %2B |
% | 37 | %25 |