应用的猫鼬连接随机关闭



我有一个简单的使用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,必须重写有问题的应用程序。 回答我自己的问题以结束这一点。

最新更新