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

How to pass data with Mongoose to a global variable?

本文关键字:全局变量 数据 何使用 Mongoose      更新时间:2023-09-26

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

user.server.model.js:

    var UserSchema = new Schema({
        ...            
        devices: []
    });
mongoose.model('User', UserSchema);

users.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;

index.server.controller.js:

var users = require('../../app/controllers/users.server.controller')
exports.render = function(req, res) {   
    res.render('index', {
        title: 'MEAN MVC',
        user: req.user ? req.user.name: '',
        device: users.devices
    });
};

我使用的是node.js、mongose、mongodb、express、embeddedjs。

我需要做的是获取设备阵列,并将其以某种方式传递到我的索引页,然后在那里用ejs处理它。由于我对JavaScript没有经验,我没有找到明确的解决方案,所以我决定将数据传递给全局变量'devices',然后将其传递给索引页控制器。

现在我面临的问题是getDevices函数不会更改全局变量'devices'。我可以肯定的是,res.json(devices)在纯json中给出了devices数组的正确结果,并且全局变量'devices'中的默认值(123)被传递到我的索引页面控制器并在页面中呈现。

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

非常感谢。

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级别使用另一个回调,或者查看promise。