【问题标题】:How to pass data with Mongoose to a global variable?如何使用 Mongoose 将数据传递给全局变量?
【发布时间】:2016-08-28 23:01:11
【问题描述】:

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

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、mongoose、mongodb、express、embeddedjs。

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

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

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

非常感谢。

【问题讨论】:

    标签: javascript node.js mongoose mean-stack


    【解决方案1】:

    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。

    【讨论】:

    • @NeymusLastneymus {object Object} 是您尝试将对象转换为字符串时得到的结果。 users.devices 是一个 javascript 对象,而不是 JSON。如果您的意思是要将其 JSON,您可以使用JSON.stringify。但是,您不需要为 res.json() 这样做 - 已经为您这样做了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多