将JSON对象设置为HTTP响应 - NodeJS

时间:2016-07-14 13:13:43

标签: mysql json node.js

我从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:""

3 个答案:

答案 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序列化程序进行响应。我们从数据库中检索的对象并不总是采用我们想要发回的格式。有时,我们可能想掩盖某些字段或其他字段。