从id发布的MongoDB文档中找到隐藏的输入

时间:2017-04-27 18:24:14

标签: javascript mongodb mongoose

如何找到与隐藏输入中发布的ID匹配的文档?

这是我的架构:

var MessageSchema = Schema({
    name: {type: String, required: true},
    message: {type: String, required: true},
    replies: [{ type: Schema.Types.ObjectId, ref: 'Comment' }]
}, {timestamps: true});

这是我的表格:

<% for(var i=0; i<messages.length; i++) { %>
  <form action="/comment/create" method="post">
        <label>Name: </label>
        <input type="name" name="name">
        <label>Comment: </label>
        <input type="text" name="comment">
        <input type="hidden" name="replyTo" value=<%= messages[i]['_id']%> >
        <button>Reply</button>
  </form>
<% } %>

我的邮寄路线很乱,所以在这一点上我只想知道如何找到该消息。

app.post('/comment/create', function(req, res) {
    console.log(req.body.replyTo);   
    var message = Message.find({ _id: req.body.replyTo }); 
    console.log(message);
    res.redirect('/');
})

console.log(req.body.replyTo)返回id 59022ff22951ce73ed9bb773。
console.log(message)返回undefined。

1 个答案:

答案 0 :(得分:0)

Messages.find的调用是异步的,因此在将结果赋给变量message时不会提供正确的值。您需要使用回调或Promise处理此问题:

作为回调

Message.find({ _id: req.body.replyTo }, (err, res) => {
  console.log(res); // message
});

作为承诺

Message.find({ _id: req.body.replyTo })
  .then((res) => {
    console.log(res); // message
  })
  .catch((err) => {
    // ...
  });