@Alecxandrys

Как разрешить Exception в Meteor.js при открытии главной станицы?

День добрый,
При открытии главной страницы в лог вываливается два эксепшена а страница не догружается до конца.
Лог:
I20160428-20:30:52.505(3)? Exception from sub battles id ZYdctF5sKwL4ueJaw TypeError: Cannot read property 'username' of undefin
ed
I20160428-20:30:52.506(3)? at [object Object].Accounts.onCreateUser.user.profile [as _handler] (server/Publish.js:35:1)
I20160428-20:30:52.506(3)? at maybeAuditArgumentChecks (livedata_server.js:1698:12)
I20160428-20:30:52.506(3)? at [object Object]._.extend._runHandler (livedata_server.js:1023:17)
I20160428-20:30:52.507(3)? at [object Object]._.extend._startSubscription (livedata_server.js:842:9)
I20160428-20:30:52.507(3)? at [object Object]._.extend.protocol_handlers.sub (livedata_server.js:614:12)
I20160428-20:30:52.507(3)? at livedata_server.js:548:43
I20160428-20:30:52.630(3)? Exception from sub battles id cNsHcdHbyTY2jqJLr TypeError: Cannot read property 'username' of undefin
ed
I20160428-20:30:52.630(3)? at [object Object].Accounts.onCreateUser.user.profile [as _handler] (server/Publish.js:35:1)
I20160428-20:30:52.630(3)? at maybeAuditArgumentChecks (livedata_server.js:1698:12)
I20160428-20:30:52.631(3)? at [object Object]._.extend._runHandler (livedata_server.js:1023:17)
I20160428-20:30:52.631(3)? at [object Object]._.extend._startSubscription (livedata_server.js:842:9)
I20160428-20:30:52.631(3)? at [object Object]._.extend.protocol_handlers.sub (livedata_server.js:614:12)
I20160428-20:30:52.631(3)? at livedata_server.js:548:43


Кусок Publish.js на который ссылаются данные эксепшены. Конкретно return:
Meteor.publish('battles', function()
{
    var x = Meteor.users.findOne({_id: this.userId});
    return battles.find({$or: [{name1: x.username}, {name2: x.username}]}, {
        fields: {
            name1   : 1,
            name2   : 1,
            battleID: 1,
            BS      : 1
        }
    });
});

Функциональность элементов, которые успели отобразится на главной странице сохраняется.
Проблема устраняется если пользователь залогинивается, но если он выходит, то главная вновь отобразится лишь частично
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Проблема устраняется если пользователь залогинивается, но если он выходит, то главная вновь отобразится лишь частично

Очевидно, что если пользователь не залогинен, то в this.userId пусто и запрос Meteor.users.findOne ничего не возвращает. А вы потом данные из этого ничего пытаетесь использовать, к полям его обращаться. Именно это и нужно проверять:
if (!currentUser) {
  return [];
}

Или что-то в этом духе.

P.S. Единственный случай, когда простительно использовать "x" в качестве названия переменной - это когда в ней хранится координата.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы