2014-11-16 105 views
1

我剛開始學習Node.js,這是我寫的代碼。 在/模塊,我有一個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:"[email protected]", 
    password:"password001" 
}); 

user001.save(function(err,result){ 
    if(err) return console.error(err); 
    console.dir(result); 
}); 

當我運行app.js ,保存後,進程不退出,我知道這是因爲貓鼬仍然連接。我的問題是如何退出時自動關閉它? (我知道我必須使用mongose.connect.close()來關閉它,但是我應該把它放在代碼中?)

+0

什麼樣的過程,你在說什麼?即使你的'save'方法返回你的服務器仍然會運行。 – Rohit

+0

Rohit,我的意思是當我運行節點app.js時,它顯示保存後的結果,但之後應用程序不會退出。我必須做一個Ctrl + C來終止應用程序。這是一個正確的行爲node.js,我必須手動終止應用程序? – user454232

+0

你如何調用'save'方法?我假設你已經開始某種類型的http服務器應用程序,這是一個正確的行爲。 – Rohit

回答

0

我不確定你的意思,當你保存用戶模型時應該與Mongo DB斷開連接。因爲在上面的代碼中,當模型保存時,您不會殺死進程,您只需記錄結果。

至於'SIGINT'事件上的監聽器,您應該能夠通過點擊CTRL-C命令從終端終止節點進程後關閉連接。

我總是在編寫應用程序時做的事情是在進程中添加更多的監聽器。

process.once('SIGUSR2', function() { 
 
\t shutdown(process.exit); 
 
}); 
 

 
process.on('SIGINT', function() { 
 
\t shutdown(process.exit); 
 
}); 
 

 
process.on('SIGTERM', function() { 
 
\t shutdown(process.exit); \t 
 
}); 
 

 
process.on('exit', function() { 
 
\t shutdown(); 
 
}); 
 

 
function shutdown(callback) { 
 
    // shutdown connections 
 
    callback && callback(); 
 
}