2017-05-14 8 views
0

に送られた後、ヘッダーを設定することはできません私は私のコードはJSONエラーをNode.jsの:彼らは

app.post('/dispalymove', function (req, res, next) { 

var lMove=""; 


if(req.body.MoveString !== null){ 
    Move.setMoveUserId(req.user.id); 
    Move.setMoveString(req.body.MoveString); 
    a.getLastMove(req.user.GameId,function(move){ 
     console.log("Return from display move:",move) 
     res.json({"msg": move, "loggedin": "true"}); 


     }); 


    } else { 

       var output = {"msg": lMove, "loggedin": "true"} 
       res.json(output); 
    } 

}); 

I機能にres.jsonを使用した後、私はこのエラーマッサージ

を取得します私が試したUPDATE

getLastMove(id,callback){ 


    var MoveRequest = "SELECT * FROM users ORDER BY id"; 

    var query = connection.query(MoveRequest, function(err,rows, result) { 

    if (rows.length == 0) { 
     return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; 
    } 
    if (rows.length > 0) { 
     for (var i in rows) { 

      var move = rows[i].MoveString; 
      if (rows[i].GameId == id){ 

       callback(move); 
      } 

     } 
    } 


    }); 


     var move="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; 
     return move; 


} 

別のファイルmove.jsに呼ばれるが、私が初めてで、ページの読み込みを出力を得る私は移動するコールバックが、私はまだ、このエラーを取得し、他のapp.postをコメントしようとしたのres後リターン、重複リンクの例のようなJSONと、サーバはそう私は、このエラーを与えますそれはリクエストが「ぶら下がっている」という意味ではないので、何が間違っているのですか?

私は、コールバックの後に復帰を追加することによって、このエラーを修正

app.post('/insertmove', function (req, res, next) { 

var lMove="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; 


if(req.body.MoveString !== null){ 
    Move.setMoveUserId(req.user.id) ; 
    Move.setMoveString(req.body.MoveString); 
    a.InsertMove(req.user.GameId); 
    a.getLastMove(req.user.GameId,function(move){ 
    console.log("Return from insertmove move:",move) 
      var output = {"msg": move, "loggedin": "true"}; 

      return res.send(JSON.stringify(output)); 

     }); 


    } else { 


      var output = {"msg": lMove, "loggedin": "true"}; // <=== here lCol always equals "" 

      return res.send(JSON.stringify(output)); 

    } 


}); 
+1

可能な重複などの

var move = rows[i].MoveString; if (rows[i].GameId == id){ callback(move); } 

[エラー:クライアントに送信された後にヘッダーを設定できません](http://stackoverflow.com/questions/7042340/error-cant-set-headers-after-they-are-sent-クライアントへ) –

+0

これは完全な例ではありません。あなたはそれに酔いしれるでしょう。基本的に、res.jsonはヘッダーを設定することができます。これにより、レスポンスオブジェクトにデータを送信する前に何も送信しないようにする必要があります。 getLastMoveはコールバックを2回以上呼び出すことができるようです。それを2回目に呼び出すと、このようなエラーが発生します。 – Joe

+0

@Joe私は別のapp.post関数をコールバックgetLastMoveが問題ですか? –

答えて

0

に "移動" を呼び出し、他のapp.postの

var move = rows[i].MoveString; 
    if (rows[i].GameId == id){ 

     callback(move); 
     return; 
    }