2015-07-18 73 views
0

我正在採取與Node.JS的第一步,並遇到了一個奇怪的問題,我不知道。我從upcoming_events.js文件我正在導出這樣此events對象:訪問使用mongoose創建的導出的json對象node.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。該proccess看起來像這樣(演示無功能):

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 

一個細節,當我出口eventsproccess_data.js這樣的:

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

任何想法,這是爲什麼嗎?

+0

可能重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) –

回答

0

1)從upcoming_events.js導出 - 是函數;

2)在模塊proccess_data.js中 - 您將其導出爲user函數;

3)並且在routes.js中它作爲對象來到,其中鍵user是功能。

因此,請嘗試data.user()[0].eventName

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; 
} 

第二個項目比第一個項目有更多的警告,但這是一個很好的習慣。