访问nodejs中的JSON对象时出错

时间:2017-04-07 12:45:13

标签: javascript json node.js asynchronous

我在名为'UserSessions.js'的文件中有一个变量 var sessions = {} 。我在 sessions = {} 中使用唯一的时间戳维护每个用户的一些信息。我已导出此变量以使其可用于其他文件。

当我访问主文件'app.js'中的 sessions = {} 时,一切正常。

但是当我尝试从另一个文件'Sessiongreet.js'访问同一个变量时,它会出错。

以下是我访问数据的方式:

假设'2017-04-07T11:55:40.162Z'是仅分配一次的唯一时间戳。

在app.js中:

这很好用:

const UserSessions=require('./UserSessions.js');

sessionId='2017-04-07T11:55:40.162Z';

var data=UserSessions.sessions[sessionId].context;

在sessionGreet.js中:

这会出错:

const UserSessions=require('./UserSessions.js');

sessionId='2017-04-07T11:55:40.162Z';

var data=UserSessions.sessions[sessionId].context;

我知道 UserSessions.sessions [sessionId] .context 存在,因为它可以在 app.js 文件中访问,然后再在另一个文件中访问它。

以下是我得到的确切错误:

TypeError: Cannot read property '2017-04-07T11:55:40.162Z' of undefined
    at initSession (/media/row_hammer/sessionGreet.js:24:33)
    at Object.run (/media/row_hammer/sessionGreet.js:67:2)
    at Object.handlePostback (/media/row_hammer/sessionTemp.js:89:19)
    at runPostback (/media/row_hammer/app.js:113:15)
    at /media/row_hammer/app.js:161:3
    at Object.findOrCreateSession (/media/row_hammer/UserSessions.js:83:4)
    at Bot.bot.on (/media/row_hammer/app.js:159:15)
    at emitThree (events.js:116:13)
    at Bot.emit (events.js:194:7)
    at Bot._handleEvent (/media/row_hammer/node_modules/messenger-bot/index.js:254:10)

另外,在sessionGreet.js中:

//EVEN this line shows 'undefined'
console.log(UserSessions.sessions);

为什么即使程序流程正确,我也会收到此错误?

1 个答案:

答案 0 :(得分:1)

可能是app.js和Sessiongreet.js位于不同的文件夹中。

'./ UserSessions.js'表示UserSessions.js与发出require()的文件位于同一文件夹中。

如果app.js与UserSessions.js位于同一文件夹中,但Sessiongreet.js位于不同的文件夹中,这可以解释您的问题。