我有一个简单的使用node.js的Web应用程序,它可以读取数据库并将这些数据显示给用户。 存在此问题,即在未主动使用应用程序后,最初查看时,连接错误并显示 [错误:连接已关闭]。重新加载连接后似乎还可以,尽管它似乎在第一次发生并且您单击后会随机轰炸(我很确定其中一名工人死于连接不良并重新启动)。 这里几乎是代码的所有重要部分...
//POSTPROVIDER.JS
var mongoose = require('mongoose');
var async = require('async');
var settings = require('./settings.js').mongodb;
if(!settings) {
console.log('Could not connect to MongoDB server - missing MongoDB settings');
}
var connectString = "mongodb://" +
settings.username + ":" + settings.password + "@" +
settings.hostname + ":" + settings.hostport + "/" +
settings.database;
mongoose.connect(connectString);
mongoose.connection.on('error', function(error) {
console.log(error)
mongoose.connect(connectString);
})
var Schema = mongoose.Schema;
var FeedbackSchema = new Schema({
//Schema
});
var feedbackDoc = mongoose.model('Feedback', FeedbackSchema);
//Example query
PostProvider.prototype.findByUuid = function(_id, callback) {
feedbackDoc.findById( _id).exclude('screenshot').exec(function (err, feedback) {
if (err) return callback(err);
var feedbacks = JSON.stringify(convertFeedback(feedback), null, ' ');
callback( null, feedbacks )
});
};
exports.PostProvider = PostProvider;
和服务器代码...
//APP.JS
var express = require('express');
var request = require('request');
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var app = module.exports = express.createServer();
// Express Config
var pub = __dirname + '/public';
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.compiler({ src: pub, enable: ['sass'] }));
app.use(express.static(pub));
app.use(app.router);
});
var error = require('./error');
app.configure('development', function(){
app.use(error({ showMessage: true, dumpExceptions: true, showStack: true, logErrors: __dirname + '/log/error_log' }));
});
app.configure('production', function(){
app.use(error({ showMessage: true, dumpExceptions: true, showStack: true, logErrors: __dirname + '/log/error_log' }));
});
var PostProvider = require('./postprovider').PostProvider;
var PostProvider= new PostProvider();
if (cluster.isMaster) {
// Fork workers.
console.log("Master is running. [ %d ]", process.pid );
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
console.log(worker)
cluster.fork();
});
} else {
// Worker processes have a http server.();
console.log("Worker is running. [ %d ]", process.pid );
//Main View
app.get('/', function(req, res){
var pageNum = 1;
res.render('layout', {
locals: {
title: 'View Portal',
pageNum: pageNum
}
});
});
app.listen(8900);
console.log("Express server listening on port 8900");
}
有没有办法检查连接的状态,如果是的话,有办法在处理查询之前正确重新连接?
对于新版本的 Node,必须重写有问题的应用程序。 回答我自己的问题以结束这一点。