2017-12-18 10 views
2

idsFromMongoを取得しようとしています。私は自分のneo4jデータベースに保存して、mongodbのidを検索して、必要なオブジェクトを返します。 1回動作しますが、サーバーがクラッシュし、エラーが返されます。送信後にヘッダーを設定できません。設定された後、頭文字が設定されない

これは私のコードです。

routes.get('/advertisements/recommended/:brand', function(req, res) { 
    res.contentType('application/json'); 

    var brandFromUrl = req.params.brand; 
    var advertisementIds = []; 

    Advertisement.find({'car.brand': brandFromUrl}) 
    .then(function (ads) { 
     // res.status(200).json(ads); 
     ads.forEach(function (record) { 
     console.log('ids: ' + record._id) 
     session 
      .run("MERGE(a:Advertisement {idFromMongo: {idParam}, brand: {brandParam}}) WITH a MATCH(b: Advertisement {brand: {brandParam}}) MERGE(a)-[:SHARED_BRAND]->(b)", {idParam: record._id.toString(), brandParam: brandFromUrl}) 
      .then(function(result) { 
      session 
       .run("MATCH (n:Advertisement{brand: {brandParam}}) RETURN (n)", {brandParam: brandFromUrl}) 
       .then(function(result) { 
       result.records.forEach(function(record){ 
        advertisementIds.push(record._fields[0].properties.idFromMongo); 
       }); 
       Advertisement.find({ 
        '_id': { $in: advertisementIds} 
       }, function(err, docs){ 
        res.status(200).json(docs); 
       }) 
      }) 
     }) 
     }); 
    }) 
    .catch((error) => { 
     res.status(400).json(error); 
    }); 
}); 

これは私のエラーです:

Error: Can't set headers after they are sent. 
    at validateHeader (_http_outgoing.js:494:11) 
    at ServerResponse.setHeader (_http_outgoing.js:501:3) 
    at ServerResponse.header (c:\dev\individueel-project\individueel-database\node_modules\express\lib\response.js:767:10) 
    at ServerResponse.send (c:\dev\individueel-project\individueel-database\node_modules\express\lib\response.js:170:12) 
    at ServerResponse.json (c:\dev\individueel-project\individueel-database\node_modules\express\lib\response.js:267:15) 
    at c:\dev\individueel-project\individueel-database\api\advertisement.routes.v1.js:70:35 
    at model.Query.<anonymous> (c:\dev\individueel-project\individueel-database\node_modules\mongoose\lib\model.js:4046:16) 
    at c:\dev\individueel-project\individueel-database\node_modules\kareem\index.js:273:21 
    at c:\dev\individueel-project\individueel-database\node_modules\kareem\index.js:131:16 
    at _combinedTickCallback (internal/process/next_tick.js:131:7) 
    at process._tickCallback (internal/process/next_tick.js:180:9) 
+0

リクエストはリクエストごとに1回のみ送信できます。しかし、あなたのコードでは、内部で複数の応答を送信しています – ZeroCho

答えて

0

ここでの問題は、あなたが配列を実行し、応答を送信している配列にされています。それで、結局それは何回かレスポンスを送信しますが、最初の時間だけが動作し、その後はエラーが発生します。 解決するには、配列へのすべての約束が完了した後(Promise.all)、配列全体が終了するまで待つ必要がない場合は、すでに応答していないかどうかを確認してくださいもう一度。

関連する問題