我刚开始学习Node.js,这是我写的代码。 在/ module中,我有一个db.js
var mongoose = require('mongoose');
var db = mongoose.connection;
db.on('error',console.error);
db.once('open',function(){
});
mongoose.connect('mongodb://localhost:27017/test');
//If the Node process ends, close the Mongoose connection
process.on('SIGINT', function() {
mongoose.connection.close(function () {
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});
});
exports.db = mongoose;
和模块user.js
var mongoose = require('./db').db;
var userSchema = mongoose.Schema({
name: "String",
email: "String",
password: "String"
});
exports.User = mongoose.model("User",userSchema);
然后在app.js
var User = require('./module/user').User;
var user001 = new User({
name:"user001",
email:"user001@email.com",
password:"password001"
});
user001.save(function(err,result){
if(err) return console.error(err);
console.dir(result);
});
当我运行app.js时,保存后,进程没有退出,我知道这是因为mongoose仍然连接。我的问题是如何在进程退出时自动关闭它? (我知道我必须使用mongose.connect.close()来关闭它,但是我应该把它放在代码中?)
答案 0 :(得分:0)
我不确定您的意思,当您保存用户模型时,您应该断开与Mongo DB的连接。因为在上面的代码中,当保存模型时,您不会终止进程,而只是从中记录结果。
对于'SIGINT'事件的监听器,您应该能够通过按CTRL-C命令从终端终止Node进程后关闭连接。
在编写应用程序时,我总是做的是为这个过程添加几个听众。
process.once('SIGUSR2', function() {
shutdown(process.exit);
});
process.on('SIGINT', function() {
shutdown(process.exit);
});
process.on('SIGTERM', function() {
shutdown(process.exit);
});
process.on('exit', function() {
shutdown();
});
function shutdown(callback) {
// shutdown connections
callback && callback();
}