0

node.jsを使用してデータベースを読み取り、このデータをユーザーに表示する単純なWebアプリがあります。この問題は、アプリがアクティブに使用されなかった後、最初に表示したときに、[エラー:接続が閉じられました]で接続エラーが発生するという問題があります。接続をリロードした後は問題ないようですが、最初に発生してクリックしているとランダムに爆撃するようです(これは、接続不良で死亡して再起動しているワーカーの1人であると確信しています)。これがコードのほとんどすべての重要な部分です...

//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");    
}

接続のステータスを確認する方法はありますか?その場合、クエリを処理する前に正しく再接続する方法はありますか?

4

1 に答える 1

0

Nodeの新しいバージョンでは、問題のアプリケーションを書き直す必要があります。これを締めくくるために私自身の質問に答えます。

于 2012-07-05T00:31:23.117 に答える