Mongoose 脚本无法正确终止
Posted
技术标签:
【中文标题】Mongoose 脚本无法正确终止【英文标题】:Mongoose script doesn't terminate properly 【发布时间】: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();
);
一切似乎都很好。该脚本打印opened
和closed
并正确更新数据库,但之后不会终止。在完成对数据库的所有更新后,我还在标注内部断开连接,因此不应该有任何挂起的查询会阻止脚本终止。
这里提出了类似的问题:Properly close mongoose's connection once you're done 但似乎没有任何真正的解决方案。
编辑:
我可以通过在末尾添加process.exit()
来终止它,但事实并非如此。
【问题讨论】:
当我尝试它时退出正常,所以问题可能在您的代码中的其他地方。 【参考方案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
。
【讨论】:
以上是关于Mongoose 脚本无法正确终止的主要内容,如果未能解决你的问题,请参考以下文章