Я пытаюсь создать несколько пользовательских объектов в NodeJS и сохранить их на карте. Они будут использоваться разработчиком чата, который я разрабатываю.
В основном то, что должно произойти, это:
- Когда пользователь впервые взаимодействует с чат-ботом, он запускает обратную передачу "FACEBOOK_WELCOME". Если пользователь существует (то есть он использовал его раньше, возможно, на другом устройстве), тогда он начнет использовать чат-бота в обычном режиме, а если пользователь не существует, ему нужно будет создать профиль пользователя
- Если пользователь существует, при последующем взаимодействии используется существующий профиль пользователя, либо считанный из объекта карты, либо считанный из базы данных, затем сохраненный в объекте карты.
Мой код пользователя выглядит так:
'use strict';
const self = module.exports = {
loadedUsers: new Map(),
add: function(senderID, data) {
// Code to load an existing user from the database
loadedUsers.set(senderID, new User(data.userID, data.gender, data.age));
},
addNewUser: function(senderID) {
// Code to create a blank user object in order to start creating user profile
loadedUsers.set(senderID, new User());
},
User: function(userID, gender, age) {
if (typeof userID === 'undefined' && typeof gender === 'undefined'
&& typeof age === 'undefined') {
this.userID = userID;
this.gender = gender;
this.age = age;
} else {
this.userID = undefined;
this.gender = undefined;
this.age = undefined;
}
},
};
Когда я хочу создать совершенно нового пустого пользователя, я просто вызываю функцию addNewUser(senderID)
. Теоретически это должно добавить пустого пользователя к картеloadedUsers (). Но это не так. Вместо этого я получаю эту ошибку:
Nov 09 15:16:20 weightmentor app/web.1: /app/app_modules/handler.js:255
Nov 09 15:16:20 weightmentor app/web.1: user.addNewUser(senderID);
Nov 09 15:16:20 weightmentor app/web.1: ^
Nov 09 15:16:20 weightmentor app/web.1: TypeError: Cannot read property 'addNewUser'
of undefined
Nov 09 15:16:20 weightmentor app/web.1: at Timeout._onTimeout
(/app/app_modules/handler.js:255:34)
Nov 09 15:16:20 weightmentor app/web.1: at ontimeout (timers.js:436:11)
Nov 09 15:16:20 weightmentor app/web.1: at tryOnTimeout
(timers.js:300:5)
Nov 09 15:16:20 weightmentor app/web.1: at listOnTimeout
(timers.js:263:5)
Nov 09 15:16:20 weightmentor app/web.1: at Timer.processTimers
(timers.js:223:10)
Я не уверен, почему происходит эта ошибка. Что-то не определено, но вопрос в том, что?
Функция вызывается следующим образом:
common.getFBUser(senderID, function(name) {
greetingText = strings.initialGreeting.replace("%USER", name);
delay = common.setDelay(greetingText);
messaging.sendTextMessage(senderID, greetingText);
setTimeout(function() {
// Pause before starting user profile creation
user.addNewUser(senderID);
user.setLoadedUserFirstName(senderID, name);
dialogflow.sendRequest(session.getIDs(), senderID, strings.createUser);
}, delay);
});
Обратите внимание, что common.getFBUser
просто получает имя пользователя из профиля Facebook с помощью Graph.API.