我在名为'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);
为什么即使程序流程正确,我也会收到此错误?
答案 0 :(得分:1)
可能是app.js和Sessiongreet.js位于不同的文件夹中。
'./ UserSessions.js'表示UserSessions.js与发出require()的文件位于同一文件夹中。
如果app.js与UserSessions.js位于同一文件夹中,但Sessiongreet.js位于不同的文件夹中,这可以解释您的问题。