我正在尝试使用Mongoose在MongoDB数据库中插入注释路由器。当我尝试运行Post路由器时,输入字段的名称似乎进入req.body.newComment,但值本身为空。
POST IN app的结果:
然而,当我尝试使用x-www-form-urlencoded在Postman中运行它时,它可以读取值并成功将文档保存到MongoDB。
邮递员的结果:
目前在./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)
});
});
有没有人知道如何解决这个问题?
提前致谢!
答案 0 :(得分:1)
我找到了解决方案!在我的PUG文件中临时删除前端JS脚本后,POST路由器正确地收到了req.body.questionTitle的值!
在我的脚本上,我编写了一个事件监听器,它在提交数据后清除表单的输入字段。似乎POST路由器在事件监听器重置后接收该字段,因此该值为空。由于Postman没有使用前端脚本,因此它没有遇到这个问题而且通常都有效。
为了解决这个问题,我在输入字段清空时增加了1ms的延时功能和超时功能!