我在express.json()
和上找不到任何文档express.urlencoded()
。他们每个人具体做什么?
express.json() 和 express.urlencoded() 是什么?
下面是应该清除疑虑的解释express.json()
并express.urlencoded()
和使用身体解析器。我花了一些时间才弄明白这一点。
什么是中间件?这些方法/函数/操作被称为 BETWEEN 处理请求并在您的应用程序方法中发送响应。
在谈论
express.json()
和express.urlencoded()
思考 POST 请求(即 .post 请求对象)和 PUT 请求(即 .put 请求对象)时你不需要
express.json()
和express.urlencoded()
GET请求或删除请求。你需要
express.json()
和express.urlencoded()
针对POST和PUT请求,因为在这两个请求你发送的数据(一些数据对象的形式)发送到服务器和你所要求的服务器来接受或存储的数据(对象),其被封闭在该req.body
(POST 或 PUT)请求的正文(即)Express 为您提供了中间件来处理请求正文中的(传入)数据(对象)。
一个。
express.json()
是 express 中内置的一种方法,用于将传入的请求对象识别为JSON 对象。此方法在您的应用程序中使用以下代码作为中间件调用:app.use(express.json());
湾
express.urlencoded()
是 express 中内置的一种方法,用于将传入的请求对象识别为字符串或数组。此方法在您的应用程序中使用以下代码作为中间件调用:app.use(express.urlencoded());
或者,我建议使用body-parser(它是一个 NPM 包)来做同样的事情。它是由构建 express 的同一批人开发的,旨在与 express 一起工作。body-parser 曾经是 express 的一部分。考虑专门用于 POST 请求(即 .post 请求对象)和/或 PUT 请求(即 .put 请求对象)的 body-parser。
在身体解析器中,你可以做
// calling body-parser to handle the Request Object from POST requests var bodyParser = require('body-parser'); // parse application/json, basically parse incoming Request Object as a JSON Object app.use(bodyParser.json()); // parse application/x-www-form-urlencoded, basically can only parse incoming Request Object if strings or arrays app.use(bodyParser.urlencoded({ extended: false })); // combines the 2 above, then you can parse incoming Request Object if object, with nested objects, or generally any type. app.use(bodyParser.urlencoded({ extended: true }));
在json
和urlencoded
中间件是两部分bodyParser。这是自述文件所说的:
bodyParser([选项])
返回解析
json
和 的中间件urlencoded
。将options
被传递到两个中间件。bodyParser.json([选项])
返回仅解析
json
. 选项是:
strict
- 只解析对象和数组limit
<1mb> - 最大请求正文大小reviver
- 传递给JSON.parse()
bodyParser.urlencoded([选项])
返回仅
urlencoded
使用qsmodule解析的中间件。选项是:
limit
<1mb> - 最大请求正文大小
如果你问我“有什么区别之间express.urlencoded({延长:假})和express.json() ”
嗯,区别在于
如果您使用express.json()它将解析来自 post/fetch 请求的正文,除了html post 表单
它不会解析来自 html帖子表单的信息
<form action="/" method="POST">
<input type="text" name="username">
<button>Submit</button>
</form>
例如,如果你用“dean_ilham”填写表格然后提交它,表达不会知道身体里面是什么。
使用快递代码:
const express = require('express')
const app = express()
app.use(express.json())
// app.use(express.urlencoded({ extended: false }))
app.use(express.static("public"))
app.get("/", (req, res) => {
res.sendFile("index.html")
})
app.post("/", (req, res) => {
res.send(req.body)
})
const port = process.env.PORT || 3001
app.listen(port, () => {
console.log(`Server Up in Port ${port}`);
})
它会{}
在您点击提交后发送。
但如果你取消注释app.use(express.urlencoded({extended: false}))
,那么你会得到{"username": "dean_ilham"}
所以区别在于express.json()是除了html post 表单之外的post 请求的正文解析器,而express.urlencoded({extended: false})是 html post 表单的正文解析器
什么是中间件
要了解 express.json 和 express.urlencoded 的作用,您必须了解中间件是什么。
中间件是 expressJS 中的函数或方法,用于对向服务器发出的请求执行各种操作。
到现在为止,您应该知道如何使用 express 获取对路由的请求。
app.get("/api/houses", (req, res) => {
console.log("Received request");
res.send("houses")
})
中间件的重要性
上面的代码是 express 如何处理 get 请求的典型示例。但是在您希望对向服务器发出的每个请求进行操作的情况下。您不希望在每条路线中都重复代码。
在这个阶段,一个中间件可以派上用场。中间件就像每个请求的通用接收器。
app.use((req, res, next) => {
console.log("Verifing request");
next();
})
以上是一个自定义中间件,它验证对我的服务器发出的每个请求,并根据请求的类型将广告发送到下一个适当的路由中间件。(获取、发布、放置等)
内置中间件
现在 expressJS 已经有一些已经制作好的中间件,可以帮助开发人员执行一些繁琐的任务。比如将请求正文转换为 JSON 等等。
这些内置 ExpressJS 中间件的示例是
- express.json()
- express.urlencoded()
express.json()是一个内置的 express 中间件,可以将请求体转换为 JSON。
express.urlencoded()就像 express.json() 将请求正文转换为 JSON,它还执行一些其他功能,例如:将表单数据转换为 JSON 等。
这个中间件在 Express v4.16.0以后可用。
app.use(express.urlencoded({ extended: true}))
extended[boolean]:此选项允许在使用查询字符串库(当为假)或 qs 库(当为真)解析 URL 编码数据之间进行选择。“扩展”语法允许将丰富的对象和数组编码为 URL 编码格式,从而实现类似 JSON 的 URL 编码体验