【问题标题】:nodejs express application won't return json arraynodejs express应用程序不会返回json数组
【发布时间】:2012-04-18 16:53:34
【问题描述】:

我有以下 express node.js 应用程序。它使用的是“redis”npm 包。

app.get("/test",function(req,res){
    var data = [];
    client.HGETALL("receipts",function(err,obj){
        for(var id in obj){
            data.push(JSON.parse(obj[id]));
        }
    });
    console.log(data);
    res.json(data);
});

app.listen(3000);

代码运行没有错误;但是,data 变量在返回到浏览器时是 []

奇怪的是,当我从命令行运行相同的 redis 命令时,数组被填充了。

谁能告诉我这里发生了什么?

【问题讨论】:

    标签: javascript node.js redis


    【解决方案1】:

    您的代码是异步的。您传递的回调在您的console.log 之后 才会执行。试试:

    app.get("/test",function(req,res){
        var data = [];
        client.HGETALL("receipts",function(err,obj){
            for(var id in obj){
                data.push(JSON.parse(obj[id]));
            }
            console.log(data);
            res.json(data);
        });
    });
    

    【讨论】:

    • 噢!我想是这样的。最初我只是在做res.send(data),我试着把它放在回调中。但由于那也是错误的,我没有看到这是解决方案。谢谢!
    • @MattPhillips,第一种方法应该没问题!?
    • 所以你可以做 res.send 并传递 json 并且它会正确设置标题?我发誓它没有用。
    • @MattPhillips,取决于您所说的“正确”是什么意思。您可以以任何一种方式设置标头,尽管可能(需要检查).send() 使用 text/html 和 .json() 使用 json 标头。我想这有多重要取决于您的用例。
    • 当我在客户端代码中“GET”的 url 需要 application/json 时。所以我想说很重要。这样我就不必在客户端解析它了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2013-11-14
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多