ExpressJS req.body 值为空

标签 express body-parser

我正在尝试使用 Mongoose 获取后置路由器以在 MongoDB 数据库中插入评论。当我尝试运行我的 Post 路由器时,输入字段的名称似乎进入了 req.body.newComment,但该值本身是空的。

POST IN 应用的结果:

Result of POST IN app

但是,当我尝试在 Postman 中使用 x-www-form-urlencoded 运行它时,它可以读取值并成功将文档保存到 MongoDB。

postman 的结果:

Result of Postman

目前在 ./app.js 中,我使用以下行来使用 body-parser

var bodyParser = require('body-parser');

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

在我的路由器文件中,我有一个用于同一个链接的 GET 和 POST 路由器,使用 :parameter 从 MongoDB 中动态获取文档。然后我使用 req.params 构建一个 findOne 查询以从 MongoDB 获取信息。这将进入一个页面,其中包含一个可以为 POST 路由器提交问题的表单。到目前为止,我的 GET 路由器工作正常。

我当前的 POST 路由器:

router.post('/kweeni/:questionTitle', function (req, res, next) {

  let c = new Comment()

  c.text = req.body.newComment,
  c.user_id = 1,
  c.question_id = 1

  c.save(function (err, doc) {
    res.json(doc)
  });

});

有人知道如何解决这个问题吗?

提前致谢!

最佳答案

我找到了解决办法!在我的 PUG 文件中临时删除我的前端 JS 脚本后,POST 路由器正确接收到 req.body.questionTitle 的值!

在我的脚本中,我编写了一个事件监听器,它在提交数据后清除表单的输入字段。似乎 POST 路由器在事件监听器重置后接收到该字段,因此该值为空。由于Postman没有使用前端脚本,所以没有遇到这个问题,正常运行。

为了解决这个问题,我在输入字段清空时添加了 1 毫秒的延迟和超时功能!

关于ExpressJS req.body 值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695657/

相关文章:

javascript - POST 正文未定义导致 Node.js 服务器关闭

javascript - 有没有办法将变量从 client.js 文件发送到您的 node.js 文件?

node.js - Webstorm 8.0.5 关于 "Unresolved method or function"的问题

node.js - 无法在 ubuntu 中启动 Node 服务器

javascript - 使用 Express 在 node.js 中模拟阻塞函数

node.js - 生成 Joi 验证 Sequelize 模型

angularjs - 请求不显示带有正文解析器的数据

javascript - CORS 政策 : No 'Access-Control-Allow-Origin' /500 (Internal Server Error) Problem

angularjs - 400 Bad Request if Authorization Bearer token 使用

javascript - 在 Node.js 中,将状态设置为 404 会返回 304