2016-07-14 11 views
0

私はMySQLからユーザー情報のセットを抽出し、JSONでシリアル化します。たとえば、私は持っています:HTTPレスポンスとしてのJSONオブジェクトのセット - NodeJS

{"ID":1,"Username":"aaa","Email":"[email protected]","Password":"123456789"} 
{"ID":2,"Username":"bbb","Email":"[email protected]","Password":"123456789"} 
{"ID":3,"Username":"ccc","Email":"[email protected]","Password":"123456789"} 
{"ID":4,"Username":"ddd","Email":"[email protected]","Password":"123456789"} 

私の目標は、このJSONオブジェクトのセットをNodeJSレスポンスに渡すことです。 私はこのような何かを試してみました:

app.get('/getUsers', function (req, res) { 

    var result = ""; 
    var JSONResult = ""; 
    var users=""; 


    connection.query('SELECT * FROM USER ORDER BY ID', function (err, rows, fields) { 

     if (err) { 

      console.log('There was an error\n' + err); 

     } 

     else { 

      for (var i in rows) { 
       result = rows[i]; 
       JSONResult = JSON.stringify(result); 
       users = users + JSONResult; 

      } 

      console.log(users); 
     } 
    }); 


    res.json({ 'data': users}); 
    res.end(users); 
}); 

をしかし、このように私の応答がdata:""です。

答えて

0

あなたは間違いなくそれをやっています。文字通り文字列に追加しないでください。その結果(users)の文字列はJSON構文のとおりではないためです。

したがって、ユーザーの配列を作成してください。最後にそれを文字通りにします。

また、私はres.end()でユーザーagainsを渡していると思います。私はそれが重複していると思います。

0

ユーザーオブジェクトの配列が既に返されているようです。なぜそれをレンダリングしないのですか?

app.get('/getUsers', function (req, res) { 
    connection.query('SELECT * FROM USER ORDER BY ID', function (err, rows, fields) { 
     if (err) return console.log('There was an error\n' + err); 

     res.json({ data: users }); 
    }); 
}); 
0

res.send関数呼び出しが約束外であると思います。したがって、クエリが完了するまでにres.json({ 'data': users })が呼び出されます。

app.get('/getUsers', function (req, res) { 
    var result = ""; 
    var JSONResult = ""; 
    var users=""; 

    connection.query('SELECT * FROM USER ORDER BY ID', function (err, rows, fields) { 
     if (err) { 
      console.log('There was an error\n' + err); 
     } 
     else { 
      for (var i in rows) { 
       result = rows[i]; 
       JSONResult = JSON.stringify(result); 
       users = users + JSONResult; 
      } 
      console.log(users); 
      res.status(200).send({ 'data': users}); 
     } 
    }); 
}); 

私はそれが役立つことを願って:]

https://github.com/billykong/active-serializer

私も応答のためのJSONシリアライザを使用することをお勧めします。データベースから取得するオブジェクトは、必ず返信する形式ではありません。場合によっては、特定のフィールドや他のフィールドをマスクすることがあります。

関連する問題