📜  我没有收到 req.body - Javascript (1)

📅  最后修改于: 2023-12-03 15:09:58.097000             🧑  作者: Mango

我没有收到 req.body - Javascript

当使用Node.js创建Web应用程序时,您可能需要通过HTTP POST请求来接收来自客户端的数据。在Express框架下,接收该数据的主要方法是通过req.body来获取。但是,有时您可能会遇到req.body未返回任何内容的情况。以下是一些常见原因和解决方法:

1. 没有使用Body Parser中间件

要使用req.body,您必须使用body-parser中间件。如果未正确安装和使用中间件,则无法访问请求正文。在您的Express应用程序中,应该像这样使用中间件:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));

// parse application/json
app.use(bodyParser.json());

以支持URL编码和JSON数据。然后,您就可以在路由处理程序中使用req.body了。

2. 请求的 ContentType 不一致

在将数据发送到服务器时,客户端应该指定其ContentType,以便服务器知道如何解析该数据。如果客户端发送application/json POST请求,但没有指定其ContentType,那么服务器将无法正确解释该请求。

在客户端使用AJAX时,您可以设置contentType选项来指定ContentType。例如:

$.ajax({
  url: '/api/users',
  data: JSON.stringify(user),
  type: 'POST',
  contentType: 'application/json',
  success: function(result) {
    console.log(result);
  }
});
3. 表单未正确编码

如果您是通过HTML表单向服务器发送数据,那么表单应该以URL编码格式发送。如果未正确编码,则服务器将无法正确解释该请求。在HTML中,您可以使用enctype属性来指定表单发送的编码类型。例如:

<form action="/api/users" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="username">
  <input type="password" name="password">
  <button type="submit">Submit</button>
</form>
4. 请求正文为空

如果请求本身未包含请求正文,则req.body将为空。这种情况通常发生在GET请求中,因为GET请求不具有请求正文。在这种情况下,您应该检查您的路由定义,以确保正确使用了HTTP方法(如POST,PUT等)。

5. 发送的数据格式错误

最后,如果您发送的数据格式不正确,服务器将无法从请求正文中解释它们。请确保你发送的数据是有效的JSON或URL编码数据,并且客户端和服务器都正确使用了请求和响应的ContentType。

希望这些指导可以帮助您找到为什么req.body未返回任何内容的原因,并解决它们!