[英]accessing exported json object created with mongoose node.js
我正在使用Node.JS迈出第一步,遇到了一个我无法解决的怪异问题。 我有这样的events
对象,来自我正在导出的upcoming_events.js
文件:
module.exports = function(passport, FacebookStrategy, config, mongoose) {
var fbEvent = new mongoose.Schema({
eventID: String,
eventName: String,
eventPic: String,
rsvp_list: Array,
category: String
})
var eventModel = mongoose.model('fbEvent', fbEvent);
eventModel.find({}, function(err, events) {
if (err) throw err;
module.exports.events = events;
})
}
在接收端,文件“ routes.js”使我能够像这样访问数据:
var events = require('../data/upcoming_events.js');
router.get('/upcoming_events', securePages, function(req, res, next){
console.log(events.events[0].eventName);//accessing data....
res.render('upcoming_events', {title: 'Welcome to aDating - Upcoming Events'});
})
和我会得到的日志看起来像这样:
{ _id: 55aa582edeea927016d5af1c,
eventID: '1111',
eventName: 'Breakfast Club',
eventPic: '4d669b',
category: 'Party',
__v: 0,
rsvp_list:
[ '12343242'
] }
到目前为止,一切正常,但现在我想将此数据传递到另一个文件'proccess_data.js'
然后将其发送到routes.js
。 该过程如下所示(无演示功能):
var events = require('../data/upcoming_events.js');
module.exports.user = events;
但是现在当我需要proccess_data.js
文件中的数据并尝试以相同方式访问它时:
var data= require('../data/proccess_data.js');
router.get('/upcoming_events', securePages, function(req, res, next){
console.log(data.events[0].eventName);//accessing data....
res.render('upcoming_events', {title: 'Welcome to aDating - Upcoming Events'});
})
我在控制台中收到以下错误:
TypeError: Cannot read property '0' of undefined
当我像这样从proccess_data.js
导出events
时,一个更详细的信息:
module.exports = function(passport, FacebookStrategy, config, mongoose) {
var events = require('../data/upcoming_events.js');
module.exports.user = events;
}
并像下面这样在routes.js中访问它:
console.log(data.user);
这是打印出来的内容:
{ [Function]
events:
[ { _id: 55aa582edeea927016d5af1c,
eventID: '1111',
eventName: 'TONIGHT - Andreas Henneberg // Breakfast Club',
eventPic: '69b',
category: 'Party',
__v: 0,
rsvp_list:
[ '12343242',
'12366662' ] },
{ _id: 55aa6a751178e94823016053,
eventID: '2222', ...And so on...
知道为什么吗?
1)从upcoming_events.js
导出-是函数;
2)在proccess_data.js
模块中-将其导出为user
函数;
3)在route.js中,它是作为关键user
起作用的对象的。
因此,尝试使用data.user()[0].eventName
。
您在使用NodeJS环境有点奇怪。
首先,您应该使用module.exports
导出JS文件的主类 。 您绝对不会(也不能)在运行时中使用(除了立即调用的函数表达式以外的任何方式),即
eventModel.find({}, function(err, events) {
if (err) throw err;
module.exports.events = events;
})
其次,你的文件的需求应该是所有模块require
在您的JS文件的顶部d和,再次,不要在运行时排序的方式:即
module.exports = function(passport, FacebookStrategy, config, mongoose) {
var events = require('../data/upcoming_events.js');
module.exports.user = events;
}
第二个项目比第一个有更多警告,但是从一开始是一个好习惯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.