2016-03-23 5 views
0

私はNode/Express.jsを使用しているので、GETルートはMongoデータベースからすべてのドキュメントを取得します。私はコードが示すように、これをノンブロッキングの方法で実現することができます。しかし、JSON形式への応答を設定する行のコメントを外すと、構文エラーが発生します。各文書はJSON形式であり、文書の集約はJSON形式ではないためです。ノンブロッキングデータフローを維持するにはどうすればいいですか?application/jsonMongoから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); 
      } 
    }); 

答えて

1

mongodb NPMパッケージとres.json(...)からtutorialを使用します。

// ... 

findDocuments(db, function(docs) { 
    db.close(); 
    res.json(docs); 
}); 

// ... 
+0

私のコードは、コレクションの上にカーソルを使用するのに対し、だから、チュートリアルでは、.toArray()メソッドを使用しています。私はここで間違っている可能性がありますが、.toArray()メソッドがブロックされていません。すべてのドキュメントが返って配列に格納されるまで待機します。 – frankgreco

+0

基本的にすべてのmongoメソッドは非同期です。つまり、ブロックされません。 –

+0

本当に非同期@SterlingArcherですか? .toArray()コールバックの 'docs'パラメータには、返されたすべてのドキュメントが含まれます(.lengthが呼び出されるため)。ここでは、私のカーソル実装のように非ブロックではありません。 – frankgreco

関連する問題