我从MySQL中提取了一组用户'信息,我在JSON中序列化它们。例如,我有:
{"ID":1,"Username":"aaa","Email":"aaa@live.it","Password":"123456789"}
{"ID":2,"Username":"bbb","Email":"bbb@live.it","Password":"123456789"}
{"ID":3,"Username":"ccc","Email":"ccc@live.it","Password":"123456789"}
{"ID":4,"Username":"ddd","Email":"ddd@live.it","Password":"123456789"}
我的目标是在NodeJS响应中传递这组JSON对象。 我尝试过这样的事情:
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 :(得分:0)
你肯定是错误的做法。不要串行并追加到字符串中。因为那时结果(用户)字符串不符合JSON语法。
所以只需创建一组用户。并在最后将其字符串化。
我猜你在res.end()中再次传递用户。我想那是重复的。
答案 1 :(得分: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 });
});
});
答案 2 :(得分: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序列化程序进行响应。我们从数据库中检索的对象并不总是采用我们想要发回的格式。有时,我们可能想掩盖某些字段或其他字段。