【问题标题】:nodejs mongoose doesn't return to console after saving an entry保存条目后nodejs mongoose不会返回控制台
【发布时间】:2013-02-07 21:28:50
【问题描述】:

我使用控制台中的一小段代码来测试在 MongoDB 数据库中保存/检索条目。它看起来像这样:

var mongoose = require('mongoose');
var models = require('../models');
mongoose.connect('localhost', 'users');
var john = new models.User({ name:'John' });
john.save(function (err, john) {
    if (err) {
        console.log(err)
    }
    else {
        console.log(john.name);
    }
});

在我运行它之后,它会在保存条目时显示名称,然后不会将我返回到控制台并且不再显示任何消息。如何让它返回控制台?

【问题讨论】:

  • 它应该返回什么其他消息?
  • 不应该只是在所有操作结束时自动返回控制台吗?

标签: javascript node.js mongodb mongoose


【解决方案1】:

只要数据库连接仍然打开,您的 node.js 程序就不会退出,因此您需要在完成后关闭连接池,如下所示:

var mongoose = require('mongoose');
var models = require('../models');
mongoose.connect('localhost', 'users');
var john = new models.User({ name:'John' });
john.save(function (err, john) {
    if (err) {
        console.log(err)
    }
    else {
        console.log(john.name);
    }
    mongoose.disconnect();
});

【讨论】:

    【解决方案2】:

    一旦对 save() 的调用完成,它就会将您返回到控制台,但那是在您的回调被调用之前。 如果保存操作需要几分钟,您可以在此期间继续使用控制台。

    当保存操作完成时,您的回调被调用并将 john.name 打印到控制台。在 REPL 中打印到控制台可能会有些棘手,因为它会在您输入的位置写入。

    所以我的猜测是你认为一切都被阻止了,因为你没有看到提示 > 但它实际上在那里,它只是 console.log 在那一行写的。如果您尝试其他命令,它应该仍然可以工作。

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2013-10-10
      • 2013-07-25
      • 2015-01-16
      • 1970-01-01
      • 2019-04-20
      相关资源
      最近更新 更多