如何使用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、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 = 123
和exports.devices = req.user.devices
。然后,users.devices
将在index.server.controller.js
中正常工作。
编辑:然而,从这样的方法返回值不是一个很好/优雅的解决方案,似乎getDevices
应该返回设备数组。如果您决定这样做的原因是Mongoose的findOne
在回调中返回结果,那么可以考虑在getDevices
级别使用另一个回调,或者查看promise。
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何使用Mongoose将数据传递到全局变量
- 将 Ajax 数据分配给全局变量时出现问题
- 如何在jquery中将xml解析数据获取为全局变量
- 将输入数据保存到全局变量
- NodeJS与AngularJS,所需的HTML文件不是跨控制器的数据绑定全局变量
- 节点模块包括数据文件作为全局变量
- 如何将从$promise返回的数据分配给全局变量
- 如何将数据存储在全局变量中以在应用程序中访问它
- 全局变量和异步数据
- 使用promise中的数据更新angular2View/全局变量
- 从.php页面获取JSON数据并将其存储在一个全局变量中
- 加载json数据到javascript全局变量
- JavaScript从json获取数据到一个全局变量
- 将服务数据保存到控制器的全局变量中
- 美元.getJSON不会将数据保存到全局变量/对象中,这是本地的
- 当不同的函数需要从数据库调用数据时,如何避免使用全局变量.(JS)
- 将RSS数据加载到全局变量中