私は最初の 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 回であることがわかります。それより前のすべては、数時間前に送信された最後の要求からのログです。
何度接続し直してもダメです。誰かがそれが何であるかについて何か考えを持っていますか?