2014-11-16 2 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 , после сохранения процесс не выходит, я знаю, что это связано с тем, что mongoose все еще подключен. Мой вопрос в том, как я могу автоматически закрыть его при завершении процесса? (Я знаю, что мне нужно использовать 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(); 
 
}

Смежные вопросы