我已经使用猫鼬和其他一些在 nodejs 环境中有用的东西制作了一个应用程序环境。在那里我定义了一个构造函数,它为每个组件设置持久化。然后我认为(并且已经写了一些工作的东西)保持连接持久以防止重新连接很多次是一个好主意。这(目前)运作良好,但有两件事我找不到答案......
1) 我可以处理连接丢失等错误吗(例如 DB-server 宕机)
db.on('error', function(error) {
console.log('MONGO: ERROR');
// evt is not fired when DB server goes down
});
db.once('disconnect', function callback() {
console.log('MONGO: DISCONNECTED');
// evt is also not fired when DB server goes down
});
2)使用在应用程序启动而不是任何用户请求时完成的持久连接是一个好主意吗?
我所有的组件都从我的持久层扩展而来,它建立连接并启动模型名称、模式定义等。
Persistence = function(modelName, schemaDefinition, config) {
this.config = config;
if ( typeof (modelName) === 'string' && schemaDefinition instanceof Object) {
this.mongoose = require('mongoose');
if (this.mongoose.connection.readyState == this.config.settings.DATABASE.disconnected) {
var con = this.mongoose.connect('mongodb://' + this.config.settings.DATABASE.host + '/' + this.config.settings.DATABASE.collection);
}
this.modelName = modelName;
this.schemaDefinition = schemaDefinition;
var db = this.mongoose.connection;
db.on('error', function(error) {
console.log('MONGO: FERROR');
});
db.once('open', function callback() {
console.log('MONGO: CONNECTED');
});
db.once('disconnect', function callback() {
console.log('MONGO: CONNECTION lost');
});
}
};