2016-02-26 44 views
0

我試圖通過ipinfo.io幫助顯示用戶位置。我創建了流星服務器方法:HTTP.get不及時提供數據

ipLocate: function() { 
     HTTP.get("http://ipinfo.io", function(error, result) { 
     var place = JSON.parse(result.content); 
     city = place.city; 
     state = place.region; 
     }); 
     return [city,state]; 
    } 

它返回用戶的城市和狀態(但僅在第二次執行時)。

我做了一個全球性的輔助

Template.registerHelper('locationFull', function() { 

     // if (!Meteor.userId()) { 

     Meteor.call('ipLocate', function(error, result) { 
     response = result 
     Session.set('location', response); 
     }) 
     return Session.get('location'); 
} 

目前顯示任何內容。

如果我手動運行客戶端中的HTTP.get請求(來自我的ipLocate方法),它將返回城市和州,但只有在運行它兩次後。

我怎樣才能讓我的城市和州在我的全球幫手頁面加載返回。

回答

0

我最終把我的HTTP調用放在Template.onCreated()中,並在全局助手中返回了帶有Session變量的變量集。

像:

Template.registerHelper('locationFull', function() { 
    return Session.get('locate'); 
    }); 

這個工作。

1

這是因爲您正在異步運行請求。由於您的退貨代碼超出了HTTP.get回調(並且它必須是,否則會引發錯誤),因此沒有任何價值。第二次返回值的原因是因爲您將城市和州宣佈爲全局變量(在它們前面沒有var限定符)。這樣做的正確方法是將您獲取的數據存儲到發佈到客戶端模板的Mongo集合中。如果您不知道如何存儲和發佈數據,請檢出Meteor Guide

+0

除了使用mongo之外,我可以以任何其他方式存儲數據嗎?我正在處理用戶尚未登錄的應用的預先認證部分。 – chackerian