我正在尝试使用 Mongoose 获取后置路由器以在 MongoDB 数据库中插入评论。当我尝试运行我的 Post 路由器时,输入字段的名称似乎进入了 req.body.newComment,但该值本身是空的。
POST IN 应用的结果:
但是,当我尝试在 Postman 中使用 x-www-form-urlencoded 运行它时,它可以读取值并成功将文档保存到 MongoDB。
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/