【问题标题】:accessing exported json object created with mongoose node.js访问使用 mongoose node.js 创建的导出的 json 对象
【发布时间】:2015-07-18 21:51:02
【问题描述】:

我正在使用 Node.JS 迈出第一步,但遇到了一个我无法弄清楚的奇怪问题。我有这个来自upcoming_events.js 文件的events 对象,我要像这样导出:

 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...

知道为什么吗?

【问题讨论】:

标签: javascript json node.js mongodb


【解决方案1】:

1) 从upcoming_events.js 导出 - 是函数;

2) 在模块proccess_data.js - 你将它导出为user 函数;

3) 在 routes.js 中,它作为对象出现,其中键 user 是函数。

那么,试试data.user()[0].eventName。

【讨论】:

    【解决方案2】:

    您使用 NodeJS 环境有点奇怪。

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

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

    其次,你的文件需要的所有模块都应该是 required 在你的 JS 文件的顶部,同样,不是以运行时的方式:即

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

    第二项比第一项有更多的注意事项,但这是一个很好的开始。

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2015-02-05
      • 2021-10-10
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2013-04-15
      • 2011-12-10
      • 2015-09-20
      相关资源
      最近更新 更多