2016-05-27 22 views
0

このノード/ express関数は私にエラーを与えています: ヘッダーを送信した後で設定することはできません。 それが正常に動作するために使用されるが、私はこのような、「アドレス」下にあるすべてのアドレス項目を移動する、ユーザー・スキーマにいくつかの変更を行いました。Nodejs:送信後にヘッダーを設定できません

firstname, 
 
lastname, 
 
address:{ 
 
    street, 
 
    city, 
 
    loc (array of numbers) 
 
    ... 
 
}

ので、新しい機能のルックスをこのような:

export function searchMembers(req, res) { 
 
    var lat = req.body.lat; 
 
    var lon = req.body.lon; 
 
    var zoom = req.body.zoom || 14; 
 
    
 
    var query = User.find(); 
 
\t var distance = 5000; 
 

 
\t // when this line is removed, problem is gone: 
 
\t query = query.where('address.loc').near({center:{type:'Point', coordinates:[lon,lat]}, maxDistance: distance, spherical:true}); 
 
\t query = query.where({'address.city': 'Toronto'}); \t 
 
\t query = query.sort({'lastname': 1}); 
 
     
 
    query.exec(function(err,users){ 
 
     if(err) res.send(err); 
 
    
 
      var final = []; 
 
      _.forEach(users, function(x){ 
 
      var obj = {}; 
 
      obj.id = x._id; 
 
      obj.name=x.firstname + ' ' + x.lastname; 
 
      obj.latitude=x.address.loc[1] ; 
 
      obj.longitude=x.address.loc[0] ; 
 

 
      final.push(obj); 
 
      }); 
 
      res.status(200).json(final); 
 
     }); 
 
}

だから私はこれを実行すると、私は面白いエラーが発生します:彼らが送信された後にヘッダーを設定することはできません。 res.status(200).json(final);関数の最後の行を指す 。

私は根本的な原因を見つけるために物を排除しようとしました。 'near'関数でwhere行を削除すると、問題はなくなります。 私は他のフィルタリングをテストのためだけに追加しました。この問題のみが問題を引き起こしています。

+0

エラー処理を 'if(err)return res.send(err)'に変更できますか?私の推測では、エラーがスローされ、 'res.send'が呼び出され、その後、最後の' res.status'が呼び出され、エラーが発生します。 –

答えて

3

このエラーは、既にメソッドres.json()/render()/send()を使用していて、もう一度実行しようとしていることを意味します。あなたのケースでは

、この行は、あなたがそれを止めるためにリターンを記述する必要がif(err) res.send(err);

を実行するからメソッドを停止しません。

ただ、 "res.send(ERR)" を返すと、それについて考えていない、それはへの復帰を使用してres.send(ERR)を使用して、その後さ

if(err) { 
    return res.send(err); 
} 

と同等です

if(err) { 
    res.send(err); 
    return; 
} 

実行を停止する。


削除行は、エラー削除理由:あなたは(不良カラム名を持つように)その行にいくつかのエラーを持っている

、したがって、コールバックでエラーが送信され、その後、あなたがres.send(err)その後を使用あなたが呼び出すres.status(200).json(final)

+1

あなたは私の一日を救った。あなたの答えは正しいですし、私はあなたのバージョンにエラー機能を変更したとき、私は、ジオ検索のためのインデックスが見つかりませんエラーを戻しました。実際にそのインデックスを追加するのを忘れてしまった。ありがとうございました! –

関連する問題