如何使用 Mongoose 将数据传递给全局变量?
How to pass data with Mongoose to a global variable?
我的相关代码分为三个文件:
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。
我需要做的是获取 设备数组 并将其以一种或其他方式传递到我的索引页面,然后我可以在那里使用 ejs 处理它。由于本人对JavaScript没有经验,没有找到明确的解决方案,所以决定将数据传给一个全局变量'devices',然后再传索引页面控制器。
现在我面临的问题是getDevices函数没有改变全局变量'devices'。我可以肯定的是,res.json(devices) 给出了 devices array 的正确结果 json并且全局变量 'devices' 的默认值 (123) 被传递到我的索引页面控制器并在页面中呈现。
非常感谢关于如何解决我的需求的任何其他建议。
非常感谢。
devices
不是全局变量:它只能从包含它的文件中访问,在您的情况下 users.server.controller.js
.
您需要导出 devices
,就像您使用 getDevices
方法一样。在 users.server.controller.js
中,执行 exports.devices = 123
和 exports.devices = req.user.devices
。然后,users.devices
将在 index.server.controller.js
.
中正常工作
编辑:但是从这样的方法返回一个值并不是一个很好的 good/elegant 解决方案,似乎 getDevices
应该返回设备数组。如果您决定这样做的原因是因为 Mongoose 的 findOne
returns 回调结果,请考虑在 getDevices
级别使用另一个回调或查看 promises.
我的相关代码分为三个文件:
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。
我需要做的是获取 设备数组 并将其以一种或其他方式传递到我的索引页面,然后我可以在那里使用 ejs 处理它。由于本人对JavaScript没有经验,没有找到明确的解决方案,所以决定将数据传给一个全局变量'devices',然后再传索引页面控制器。
现在我面临的问题是getDevices函数没有改变全局变量'devices'。我可以肯定的是,res.json(devices) 给出了 devices array 的正确结果 json并且全局变量 'devices' 的默认值 (123) 被传递到我的索引页面控制器并在页面中呈现。
非常感谢关于如何解决我的需求的任何其他建议。
非常感谢。
devices
不是全局变量:它只能从包含它的文件中访问,在您的情况下 users.server.controller.js
.
您需要导出 devices
,就像您使用 getDevices
方法一样。在 users.server.controller.js
中,执行 exports.devices = 123
和 exports.devices = req.user.devices
。然后,users.devices
将在 index.server.controller.js
.
编辑:但是从这样的方法返回一个值并不是一个很好的 good/elegant 解决方案,似乎 getDevices
应该返回设备数组。如果您决定这样做的原因是因为 Mongoose 的 findOne
returns 回调结果,请考虑在 getDevices
级别使用另一个回调或查看 promises.