什么时候关闭猫鼬连接

时间:2014-11-16 16:36:14

标签: node.js mongoose

我刚开始学习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()来关闭它,但是我应该把它放在代码中?)

1 个答案:

答案 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();
}