访问使用mongoose node.js创建的导出的json对象

时间:2015-07-18 21:51:03

标签: javascript json node.js mongodb

我正在使用Node.JS迈出第一步,遇到了一个奇怪的问题我无法弄清楚。我有observeEvent(input$time_span, { points_df <- ddply(filter_df(), c("lat", "lon"), summarise, count = length(timestamp)) cat(nrow(points_df)) leafletProxy("map", data = points_df) %>% clearShapes() %>% addCircles() }) 这个events文件的对象来自我正在导出的文件:

upcoming_events.js

并且在接收方,文件'routes.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;
        })

    }

我会看到这样的日志:

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'。 proccess看起来像这样(没有演示功能):

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 导出events时,还有一个细节:

proccess_data.js

并在routes.js中像这样访问它:

module.exports = function(passport, FacebookStrategy, config, mongoose) {
    var events = require('../data/upcoming_events.js');
    module.exports.user = events;
}

打印出来的是:

console.log(data.user);

任何想法为什么这样?

2 个答案:

答案 0 :(得分:0)

1)从upcoming_events.js导出 - 是功能;

2)在模块proccess_data.js中 - 您将其导出为user函数;

3)在routes.js中,它将作为键user正在运行的对象。

所以,试试data.user()[0].eventName

答案 1 :(得分:0)

你有点奇怪地使用NodeJS环境。

首先,您应该使用module.exports导出JS文件的主。你肯定不会(也不能)在运行时(除了立即调用的函数表达式之外的任何东西)中使用它,即。

eventModel.find({}, function(err, events) {
    if (err) throw err;
    module.exports.events = events;
})

其次,您的文件所需的所有模块应该是require d在JS文件的顶部,而且不是在运行时类型中:即。

module.exports = function(passport, FacebookStrategy, config, mongoose) {
    var events = require('../data/upcoming_events.js');
    module.exports.user = events;
}

第二项比第一项有更多的警告,但这是一个很好的做法。