【问题标题】:How do I render a page after MongoDB findOne and save (async)?如何在 MongoDB findOne 之后呈现页面并保存(异步)?
【发布时间】:2016-02-12 06:56:55
【问题描述】:

我的问题涉及以下代码:

DB.findOne({ '_id' : req.user._id }, function(err, user) {
  user.count+=1;
  user.save(function(err) {
    if (err) req.flash('error', err.message);
    done(err, user);
    req.flash('success', 'count incremented');
    res.render('page1', {
      user : req.user
      success: req.flash('success'),
    });
  });
});

在 Mongo 查询和保存完成后呈现页面时遇到问题。

有没有优雅的解决方案?

【问题讨论】:

  • 看看你为用户名选择了什么,但你无法确定你在这里做错了什么。真的吗?还。模式不好。更好:DB.findByIdAndUpdate(req.user._id,{ "$inc": { "count": 1 }},{ "new": true },function(err,user) { // work with modified user })
  • 新的 mongoose 版本使用了 Promise,我建议使用它。可以让你免于回调 H

标签: node.js mongodb asynchronous


【解决方案1】:

您可以在 回调 中添加rend 函数。

DB.findOne({ '_id' : req.user._id }, function(err, user) {
  user.count+=1;
  user.save(function(err) {
    if (err) req.flash('error', err.message);
    done(err, user);
req.flash('success', 'count incremented');
res.render('page1', {
  user : user
  success: req.flash('success'),
});
  });
});

【讨论】:

  • 感谢您的建议。我已经尝试过了,但是当我这样做时会得到Error: Can't set headers after they are sent
  • 试过了,同样的错误,但这次页面根本不渲染。
猜你喜欢
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2014-12-10
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多