解决 Express.js 中 req.body 为 null 的问题

阅读时长 5 分钟读完

在使用 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-urlencodedmultipart/form-data。如果请求体是 JSON 格式的数据,则需要将 Content-Type 设置为 application/json。如果你没有正确设置请求头,那么请求体将不会被正确解析,从而导致 req.body 返回 null。

下面是一个正确设置请求头的示例代码:

-- -------------------- ---- -------
----- ------- - -------------------

----- --- - ----------
----- ---------- - ---------------

-- ----
---------------- ----------- ----- ---- -- -
  ----------------------
  --------------- ---------
---

---------------- -- -- ------------------- -- --------- -- ---- ---------

在上述示例代码中,我们使用了 express.json() 中间件,并在请求处理程序中使用 jsonParser 变量来处理请求。除此之外,我们还正确设置了 Content-Type 请求头,以便将请求体解析为 JSON 格式。

方法三:手动解析请求体

手动解析请求体是一种不依赖于第三方库的解决方法。在这种方法中,我们需要使用 Node.js 的内置模块 querystring 来解析请求体。暴露的 req 对象来自 HTTP 套接字,它是 Stream 的实例,因此,可以使用 dataend 事件来解析请求体。

下面是一个手动解析请求体的示例代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- ----------- - -----------------------

----- --- - ----------

-- ----
---------------- ----- ---- -- -
  --- ---- - ---
  -------------- ------- -- -
    -----------------
  ------------ -- -- -
    ---- - -------------------------------
    -------- - ------------------------
    ----------------------
    --------------- ---------
  ---
---

---------------- -- -- ------------------- -- --------- -- ---- ---------

在上述示例代码中,我们使用了 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

纠错
反馈