如何从ExpressJS返回一个数组?

时间:2014-12-21 22:50:48

标签: node.js express

有人可以解释这是怎么回事吗?来自Express的数组在返回之前被销毁。在下面的示例中,我成功填充了resData.user.apps数组,并可以通过服务器的控制台日志查看。但是,当返回resData对象时,数组为空:

// Build the response
var resData = {
    success: true,
    user: {
        email: newUserItem.email,
        apps: []
    }
};

// Add any default applications
Application.find({ isDefault: true, isDeleted: false }, function(err, defaultApps){
    if (err){
        console.log(err);
        return res.status(500).send({ message: 'Failure loading default applications.' });
    } else {
        if (defaultApps.length < 1){
            console.log('No default apps');
        } else {
            defaultApps.forEach(function(defaultApp){
                var app = {
                    name: defaultApp.formalName,
                    url: defaultApp.url,
                    def: true
                };

                console.log(app);
                resData.user.apps.push(app);

                console.log('Sanity: ' + JSON.stringify(resData));
            });
        }
    }
});

return res.send(resData);

1 个答案:

答案 0 :(得分:0)

这里的问题是查找是异步的,因此您在调用完成之前回写响应。移动返回res.send(resData);进入查找回调。

Application.find({ isDefault: true, isDeleted: false }, function(err, defaultApps){
    if (err){
        console.log(err);
        return res.status(500).send({ message: 'Failure loading default applications.' });
    } else {
        if (defaultApps.length < 1){
            console.log('No default apps');
        } else {
            defaultApps.forEach(function(defaultApp){
                var app = {
                    name: defaultApp.formalName,
                    url: defaultApp.url,
                    def: true
                };

                console.log(app);
                resData.user.apps.push(app);

                console.log('Sanity: ' + JSON.stringify(resData));

            });


        }
      res.send(resData);
    }
});