0
私はNode/Express.jsを使用しているので、GETルートはMongoデータベースからすべてのドキュメントを取得します。私はコードが示すように、これをノンブロッキングの方法で実現することができます。しかし、JSON形式への応答を設定する行のコメントを外すと、構文エラーが発生します。各文書はJSON形式であり、文書の集約はJSON形式ではないためです。ノンブロッキングデータフローを維持するにはどうすればいいですか?application/json
MongoからJSON形式のレスポンスへのノンブロッキング書き込み
私はGETルートの下にmongoデータベースから項目を取得するために使用している関数も含めています。
GETルート:
app.get('/people', function(req, res){
//res.set('Content-Type', 'application/json');
mongoDriver.get(null, function(err, code, document){
res.status(code);
if(err) {
res.write(JSON.stringify(err));
} else if(document){
res.write(JSON.stringify(document));
}
if(!document){
res.end();
}
});
});
私のmongo実装の関連部分。
var cursor = db.collection(self.collection).find(data);
cursor.each(function(err, doc) {
if(err) {
return callback(err, 500);
} else if (doc !== null) {
return callback(null, 200, doc);
} else {
db.close();
return callback(null, 200, null);
}
});
私のコードは、コレクションの上にカーソルを使用するのに対し、だから、チュートリアルでは、.toArray()メソッドを使用しています。私はここで間違っている可能性がありますが、.toArray()メソッドがブロックされていません。すべてのドキュメントが返って配列に格納されるまで待機します。 – frankgreco
基本的にすべてのmongoメソッドは非同期です。つまり、ブロックされません。 –
本当に非同期@SterlingArcherですか? .toArray()コールバックの 'docs'パラメータには、返されたすべてのドキュメントが含まれます(.lengthが呼び出されるため)。ここでは、私のカーソル実装のように非ブロックではありません。 – frankgreco