1

私は最初の NodeJS アプリケーションに取り組んでいます。これは基本的に、MongoDB (MongoHQ でホストされている) データベースを使用する安静な Web サービスです。

Express と Mongoose を使用してルーティングとデータベース アクセスを支援していますが、ほとんどの場合はうまく機能しているように見えますが、ランダムに、データベースにアクセスするために記述したミドルウェア メソッドの 1 つが開始するという問題が発生します。 、マングースルックアップを呼び出しますが、応答が得られず、最終的に http 要求がタイムアウトします。

背景知識、私が扱っている私のドメインオブジェクトは「コンボイ」と呼ばれ、その識別子である convoyCode を持っています。これに基づいて調べようとしています。

ここに方法があります

function findConvoy(request, response, next){
    var convoyCode;

    if (request.method == 'GET'){
        var _url = url.parse(request.url);
        var queryString = qs.parse(_url.query); 
        convoyCode = queryString.ConvoyCode;
    } else {
        convoyCode = request.body.ConvoyCode;
    }

    console.log("Finding Convoy " +  convoyCode);

    Model.findOne({ name:convoyCode}, function(err, convoy){
            if (err){
                console.log("Error finding convoy " + err);
                                    response.send('ERROR FINDING CONVOY', 500);

            }
            if (convoy){
                request.ReturnedConvoy = convoy;
                    console.log("Found Convoy " + convoyCode);
                next();
            } else {
                console.log("Convoy not found.");
                response.send('CONVOY NOT FOUND', 404);
            }
    });
}

呼び出される POST メソッドは次のようになります。

    app.post("/JoinConvoy",  findConvoy, function(request, response){
    //stuff here

    }

私のデータベースモデルは

    var Convoy = new mongoose.Schema({

      name: String
    , creator: String
    , startDate: Date
    , destinationLat: Number
    , destinationLong: Number
    , currentLocations: [Locations]

});

//get the model
var Model = mongoose.model('Convoy', Convoy);

それほど重要である必要はありません。ほとんどの場合、すべてが完全に機能しますが、サーバーを使用せずにしばらく実行したままにしておくと、戻ってきて、再起動するまで接続できないようです。

コンソールログは次のとおりです。

ID 57C18326-7EBB-5A99-88BD-D34E9F108D98 Convoy ZX12 を更新しようとしています ユーザー B が ZX12 で自分の場所を更新しました Finding Convoy ZX12 Finding Convoy ZX12

Convoy ZX12 の最後の 2 つの検索結果は、メソッドを呼び出そうとした 2 回であることがわかります。それより前のすべては、数時間前に送信された最後の要求からのログです。

何度接続し直してもダメです。誰かがそれが何であるかについて何か考えを持っていますか?

4

1 に答える 1

0

sendメソッドの代わりにendを入れてみてください

function findConvoy(request, response, next){
  var convoyCode;

  if (request.method == 'GET'){
    var _url = url.parse(request.url);
    var queryString = qs.parse(_url.query); 
    convoyCode = queryString.ConvoyCode;
  } else {
    convoyCode = request.body.ConvoyCode;


  console.log("Finding Convoy " +  convoyCode);

  Model.findOne({ name:convoyCode}, function(err, convoy){
        if (err){
            console.log("Error finding convoy " + err);
                                response.send('ERROR FINDING CONVOY', 500);

        }
        if (convoy){
            request.ReturnedConvoy = convoy;
                console.log("Found Convoy " + convoyCode);
            next();
        } else {
            console.log("Convoy not found.");
            // end instead on send    
            response.end('CONVOY NOT FOUND', 404);

        }
});
}
于 2012-10-15T04:09:23.337 に答える