繁体   English   中英

何时关闭猫鼬连接

[英]When to close mongoose connection

我刚刚开始学习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时,保存后进程不会退出,我知道这是因为猫鼬仍处于连接状态。我的问题是,当进程退出时如何自动关闭它? (我知道我必须使用mongose.connect.close()将其关闭,但是我应该在代码中放在哪里?)

我不确定您的意思是什么,在保存用户模型时应断开与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(); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM