如何使用Mongoose将数据传递给全局变量?

时间:2016-05-03 18:40:26

标签: javascript node.js mongoose mean-stack

我的相关代码分为三个文件:

user.server.model.js:

high

users.server.controller.js:

    var UserSchema = new Schema({
        ...            
        devices: []
    });

mongoose.model('User', UserSchema);

index.server.controller.js:

var User = require('mongoose').model('User') 

var devices = 123;

exports.getDevices = function(req, res, next) { 
    User.findOne({
            _id: req.user.id
        },
        function(err, user) {
            if (err) {
                return next(err);
            }
            else {
                devices = req.user.devices;
                res.json(devices)                       
            }
        }
    )
}

exports.devices = devices;

我正在使用node.js,mongoose,mongodb,express,embeddedjs。

我需要做的是获取设备数组并将其以一种方式或其他方式传递到我的索引页面,然后我可以使用ejs处理它。由于我没有JavaScript经验,所以我没有找到明确的解决方案,因此我决定将数据传递给全局变量'devices',然后将其传递给索引页控制器。

现在我面临的问题是 getDevices 功能不会更改全局变量'devices'。我肯定知道的是, res.json(devices)在普通json中给出了 devices array 的正确结果,并且全局变量的默认值为(123) 'devices'会传递到我的索引页面控制器并在页面中呈现。

非常感谢任何其他建议如何解决我的需求。

非常感谢。

1 个答案:

答案 0 :(得分:0)

devices不是全局变量:它只能在包含它的文件中访问,在您的情况下users.server.controller.js

您需要导出devices,就像使用getDevices方法一样。在users.server.controller.js中,执行exports.devices = 123exports.devices = req.user.devices。然后,users.devices将在index.server.controller.js中正常运行。

编辑:但是从这样的方法返回一个值不是一个非常好/优雅的解决方案,似乎getDevices应该返回设备数组。如果您决定这样做的原因是因为Mongoose的findOne会在回调中返回结果,请考虑在getDevices级别使用其他回调或查看承诺。