【问题标题】:Mongoose script doesn't terminate properlyMongoose 脚本无法正确终止
【发布时间】:2016-03-09 23:05:03
【问题描述】:

我有一个 node.js 脚本,我想定期运行它使用 mongoose 写入 mongodb。它连接到 mongodb,写入和断开连接。问题是脚本有时似乎挂起。我必须手动终止脚本(ctrl+C)。

mongoose.connect(MONGODB_URL);

var db = mongoose.connection;
db.on('error', function(err) {
    console.log(err);
});
db.on('open', function() {
    console.log('opened');
});
db.on('close', function() {
    console.log('closed');
});

Model.update(....., function(err) {
    if (err) throw err;
    mongoose.disconnect();
});

一切似乎都很好。该脚本打印openedclosed 并正确更新数据库,但之后不会终止。在完成对数据库的所有更新后,我还在标注内部断开连接,因此不应该有任何挂起的查询会阻止脚本终止。

这里提出了类似的问题:Properly close mongoose's connection once you're done 但似乎没有任何真正的解决方案。

编辑:
我可以通过在末尾添加process.exit() 来终止它,但事实并非如此。

【问题讨论】:

  • 当我尝试它时退出正常,所以问题可能在您的代码中的其他地方。

标签: node.js mongodb mongoose


【解决方案1】:

mongoose.connection.close() 为我工作,但您需要确保在调用它之前完成所有数据库操作。

【讨论】:

    【解决方案2】:

    这是访问 Mongo 数据库的示例脚本:

    const { Model } = require("../models");
    const mongoose = require("mongoose");
    
    async function run() {
    
        let c = `mongodb://${process.env.DBUSER}`;
        c += `:${process.env.DBPASS}`;
        c += `@${process.env.DBHOST}`;
        c += `:${process.env.DBPORT}`;
        c += `/${process.env.DBNAME}`;
        await mongoose.connect(
          c,
          { useNewUrlParser: true, useUnifiedTopology: true },
          () => {}
        );
        const db = mongoose.connection;
        db.on("error", console.error.bind(console, "MongoDB connection error:"));
    
        const instances = await Model.find({});
        for (const i of instances) {
          console.log(i.title);
        }
    
        mongoose.connection.close();
    }
    
    
    run().catch((error) => console.log(error.stack));
    

    如果它保存在像 script.js 这样的文件中,只需运行 node script.js

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 2020-11-13
      • 2018-06-25
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多