2

エラーがスローされることなく、サーバーを稼働させています。mongodb からデータをストリーミングしています。データのストリーミングが完了したら、「close」を呼び出してから、mongo データベースを切断します。

以下は私が持っているコードです。サーバーに接続しようとすると、最初のリクエストは成功しますが、追加のリクエストは失敗します。

mongodb が切断されているかどうかを確認しようとしたところ、切断されていないことがわかりました。

どのように使用しmongoose.connection.close()、いつ失敗しますか?

var http = require('http')
  , url = require('url')
  , mongoose = require('mongoose')
  , Schema = mongoose.Schema
  , server, n;

server = http.createServer(function(request, response) {
  var path = url.parse(request.url).pathname.slice(0, 4);
  n = url.parse(request.url).pathname.slice(5);

  // connect to mongo
  mongoose.set('debug', true);
  mongoose.connect('localhost', 'lotsOfNumber');
  mongoose.connection.on('error', function(err) {
    console.error('connection error: ' + err);
  });

  mongoose.connection.on('open',function() {

    var stuff = mongoose.model('numbersHere', new Schema({serialNumber: Number}, {safe: true}));

    switch (path) {

      case '/slq':

        var stream = stuff.find({}).limit(1).skip(n).sort('field value').stream();

        stream.on('error', function(err) {
          console.error("Error trying to stream from collection:" + err);
        });

        stream.on('data', function(doc) {
          response.writeHead(200, {'Content-Type': 'text/plain'});
          response.write(doc.value.toString() + '\n', 'utf8');
          response.end();
        });

        stream.on('close', function() {
          mongoose.connection.close();
          mongoose.connection.on('close', function() {console.log('closed');});
        });

        break;

      default:
        console.log('nothing');
        mongoose.connection.close();
        break;
    }
  });
});

server.listen(8080);

どんな助けでも大歓迎です。

4

1 に答える 1

8

私はいつも次のようなパターンを使用してきました。

mongoose.connect('localhost', 'lotsOfNumber');
...
mongoose.disconnect();

ただし、あなたのように、リクエストごとに接続および切断するべきではありません。代わりに、アプリケーションの起動中に接続し、シャットダウン中に切断します。

mongoose.connect同時要求が共有できる接続のプールを開きます。

于 2012-11-02T21:53:14.353 に答える