ExpressJS req.body值为空

时间:2018-04-06 14:59:21

标签: express body-parser

我正在尝试使用Mongoose在MongoDB数据库中插入注释路由器。当我尝试运行Post路由器时,输入字段的名称似乎进入req.body.newComment,但值本身为空。

POST IN app的结果:

Result of POST IN app

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

邮递员的结果:

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路由器,使用:参数动态获取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)
  });

});

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

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