繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM