2017-06-21 14 views
1

ノードjsを使用してAPIを作成していますが、複数のパラメータapiに問題があります。私はcouchbaseから複数の文書を取得しています。 APIは複数のJSONドキュメントを返しますが、その後はプログラムがクラッシュします。私はres.send()に一度だけ電話します。私はどこが間違っているのか分かりません。これは私のAPIです:res.send() - 送信後にヘッダーを設定できません。

router.get("/employee/collectinsert/:_startdate/:_enddate", function(req, res, next){ 

var startDate = moment(req.params._startdate); 
var endDate = moment(req.params._enddate); 
var daysOfYear = []; 
for(var date = moment(startDate); date.diff(endDate,'days') < 1; date.add(1, 'days')){ 
    daysOfYear.push(formatDate(date)); 
} 

bucket.getMulti(daysOfYear,function(err, results){ 
    if(err) throw err; 

    for(var key in results) { 
     if(results.hasOwnProperty(key)) { 
      if(results[key].error) { 
       console.log("`" + key + "`: " + JSON.stringify(results[key])); 
      } 
      res.send(results); 
     } 
    } 
    process.exit(0); 
}); 

});

そして、私はこのエラーを取得しています:

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11) 
    at ServerResponse.header (C:\Users\ekaplan\Desktop\dashboard\node_modules\express\lib\response.js:730:10) 
    at ServerResponse.send (C:\Users\ekaplan\Desktop\dashboard\node_modules\express\lib\response.js:170:12) 
    at C:\Users\ekaplan\Desktop\dashboard\api\employee.js:53:21 
    at C:\Users\ekaplan\Desktop\dashboard\node_modules\couchbase\lib\bucket.js:1280:9 

答えて

4

それがためのループであるとしてあなたはres.send()を複数回呼び出しています。ループ外に移動する

0

@res.header("Access-Control-Allow-Origin", "*");のようにヘッダーを設定し、@ Stretch0と同じように送信する必要があるため、ループの外側に移動します。

1

res.sendがループしていて、1つの応答しか送信できません。

あなたはおそらくこれをしたい:

bucket.getMulti(daysOfYear,function(err, results){ 
    if(err) throw err; 

    for(var key in results) { 
     if(results.hasOwnProperty(key)) { 
      if(results[key].error) { 
       console.log("`" + key + "`: " + JSON.stringify(results[key])); 
      } 

     } 
    } 
    res.send(results); 
} 
関連する問題