2016-08-22 3 views
0

Так что у меня этот код ребятаMeteor.connection._lastSessionId не определено в onCreated

Template.mainLayout.onCreated(function() { //HERE 
    console.log("mainLayout created"); 
    var context = FlowRouter.current(); 
    // use context to access the URL state 
    console.log(context); 
    var visitedOne = context.path; 

    //getting the connID 

    var clientIp = headers.getClientIP(); // no need for this anymore 
    var clientConnId = Meteor.connection._lastSessionId; // HERE 
    console.log(clientIp); 
    console.log(clientConnId); //HERE 
    // console.log(Meteor.connection._lastSessionId); 



    Meteor.call("updateHistory", {clientIp,clientConnId,visitedOne}, function(error, result){ 
    if(error){ 
    console.log("error", error); 
}); 
    if(result){ 

    } 
    });//Meteor.call 
}); 

Мои проблемы отмечены замечания //HERE

Meteor.connection._lastSessionId возвращает неопределенное значение в случае onCreated. Однако, если я пытаюсь попасть на событие click, он работает отлично. Почему это вызвано, что обходным путем для этого?

ответ

1

Вы пытаетесь зарегистрировать идентификатор сеанса до получения соединения. Например, обернуть вызов в setTimeout:

... 
setTimeout(() => { 
    console.log(Meteor.connection._lastSessionId); 
}, 500); 
... 

Вы, возможно, придется настроить значение тайм-аута немного, но он будет записан. Использование setTimeout в этом способе действительно не настолько надежное, хотя количество времени, которое требуется для получения идентификатора сеанса, может варьироваться. Вероятно, вы захотите изучить какой-то простой опрос, чтобы постоянно проверять идентификатор сеанса, пока он не будет установлен.

0

В основном _lastSessionId пока не доступен на сайте в том случае, если шаблон был изначально создан (это, вероятно, первый шаблон в вашем приложении). Однако нет необходимости получать это на клиенте, так как вы все равно вызываете метод сервера, просто используйте переменную прямо там, где она уже существует!

Так упрощать:

Meteor.call("updateHistory", {clientIp,clientConnId,visitedOne}, callback) 

к:

Meteor.call("updateHistory", visitedOne, callback) 

и получить ClientIP (при необходимости) и использовать this.connection.id на сервере.

 Смежные вопросы

  • Нет связанных вопросов^_^