在使用 Express.js 时,我们经常会遇到 req.body 返回 null 或空对象的问题,这可能是由于许多原因引起的,但最常见的原因是没有设置正确的中间件。
在本文中,我们将探讨解决 Express.js 中 req.body 为 null 的问题的几种方法。我们将详细介绍每种方法的优缺点,以及使用方法和示例代码。
方法一:使用 body-parser 中间件
在 Express.js 中,我们可以使用 body-parser 中间件来处理 POST 和 PUT 请求的数据。这个中间件可以将请求体解析成 JSON 格式或其他格式,然后将其附加到 req.body 对象中。一般而言,在使用 Express.js 时,我们都会安装并使用 body-parser 中间件来解析请求体。
下面是安装和使用 body-parser 中间件的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --- - ---------- --------------------------- ------------------------------- --------- ---- ---- -- ---- ---------------- ----- ---- -- - ---------------------- --------------- --------- --- ---------------- -- -- ------------------- -- --------- -- ---- ---------
在上面的示例代码中,我们安装了 body-parser 中间件并使用它来解析 POST 请求的数据。使用 bodyParser.json()
可以将请求体解析成 JSON 格式,并将其附加到 req.body 对象中。使用 bodyParser.urlencoded({ extended: true })
可以解析表单数据,并将其附加到 req.body 对象中。最后,我们在请求处理程序中读取 req.body 并将其发送回客户端。
方法二:正确设置请求头
如果你使用的是自定义中间件来处理请求,那么需要确保设置了正确的请求头。在处理请求时,我们需要告诉浏览器发送的数据类型是什么,以便服务器可以正确地解析请求体。
对于 POST 请求,我们需要设置 Content-Type 请求头为 application/x-www-form-urlencoded
或 multipart/form-data
。如果请求体是 JSON 格式的数据,则需要将 Content-Type 设置为 application/json
。如果你没有正确设置请求头,那么请求体将不会被正确解析,从而导致 req.body 返回 null。
下面是一个正确设置请求头的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ---------- - --------------- -- ---- ---------------- ----------- ----- ---- -- - ---------------------- --------------- --------- --- ---------------- -- -- ------------------- -- --------- -- ---- ---------
在上述示例代码中,我们使用了 express.json()
中间件,并在请求处理程序中使用 jsonParser 变量来处理请求。除此之外,我们还正确设置了 Content-Type 请求头,以便将请求体解析为 JSON 格式。
方法三:手动解析请求体
手动解析请求体是一种不依赖于第三方库的解决方法。在这种方法中,我们需要使用 Node.js 的内置模块 querystring
来解析请求体。暴露的 req 对象来自 HTTP 套接字,它是 Stream 的实例,因此,可以使用 data
和 end
事件来解析请求体。
下面是一个手动解析请求体的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - ----------------------- ----- --- - ---------- -- ---- ---------------- ----- ---- -- - --- ---- - --- -------------- ------- -- - ----------------- ------------ -- -- - ---- - ------------------------------- -------- - ------------------------ ---------------------- --------------- --------- --- --- ---------------- -- -- ------------------- -- --------- -- ---- ---------
在上述示例代码中,我们使用了 req
事件监听器来获取数据,然后使用 end
事件监听器来将请求体数据解析并附加到 req.body 对象上。
总结
在使用 Express.js 时,req.body 为 null 的问题是很常见的。本文介绍了三种解决此问题的方法:使用 body-parser 中间件、正确设置请求头和手动解析请求体。每种方法都有自己的优缺点和适用场景。现在你可以根据你的需求和喜好选择你喜欢的方法来解决这个问题。
本文中所有的示例代码可以在我的 GitHub 上找到:https://github.com/ruanyf/express-demo。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649686a748841e98943b2035