2017-12-21 12 views
0

さまざまな言語のドメイン名を提供する私のドメイン生成アプリケーションに取り組んでいます。Meteor mongo sessions

ユーザーセッション内にmongoコレクションを格納することは可能ですか?だから、すべてのユーザーが異なるコレクション結果を見ることができました。ヘルパーを使用して

Template.search.events({ 
    'submit .new-input'(event) { 

    Meteor.call('remove',function(){}); 
    event.preventDefault(); 


    const target = event.target; 
    const text = target.text.value; 
    Help.insert({text: text}); 
    Place.insert({text: text,createdAt: new Date()}); 
    Meteor.call('translateToEn',function(){}); 

    target.text.value = ''; 
Meteor._reload.reload(); 
    }, 

を、印刷データ::私はこのようなイベントを提出し、クライアント側からこのメソッドを呼び出してい

Meteor.methods({ 
    translateToEn: function(){ 
    var arrayy = Help.find().fetch(); 
    var text = arrayy[0].text; 
    var final; 
    var myJSON; 

    Typed.remove({}); 

    var translate = require('yandex-translate-api')('trnsl.1.1.20170424T153548Z.48f645437a55346f.e53fc386af70fd7d7f7138ae23b6c79fb3a5def9'); 
    translate.translate(text, { to: 'en'},Meteor.bindEnvironment(function(err, res) { 

    myJSON = JSON.stringify(res.text); 
    myJSON = myJSON.replace(/\s/g, ''); 
    myJSON = JSON.parse(myJSON); 
    myJSON.toString() 
    final = myJSON; 
    var geras = final.toString(); 
    var naujas = Diacritics.remove(geras); 

    final = naujas; 

    var array = [{"text": " "}] 
    var ends = [{"text": ".com"},{"text": ".co.uk"},{"text": ".net"},{"text": ".org"},{"text": ".eu"},{"text": ".biz"},{"text": ".blog"},{"text": ".in"}] 
    var sug; 

    for(var i=0; i<8; i++) 
    { 
     var randomIndex = Math.floor(Math.random() * array.length); 
     var randomIndex2 = Math.floor(Math.random() * ends.length); 
     var element = array[randomIndex].text; 
     var end = ends[randomIndex2].text; 
     sug = final + element+end; 
     sug = sug.replace(/\s/g, ''); 
     Typed.insert({ 
     text: sug, 
     createdAt: new Date(), 
     lang: res.lang }); 

    } 

url = 'https://api.ote-godaddy.com/v1/domains/available?checkType=FAST'; 

headers = { 
    "Authorization": "sso-key 2s7YSCfHkx_Xsfgx2tB1fV4WVrdd8VQuz:XsfkhRdwfMCm633B7GT6qz", 
    "Content-Type": "application/json", 
    "Accept": "application/json" 
} 

var arrays = Typed.find().fetch(); 
var test = arrays[0].text+' '; 
var lang = arrays[0].lang; 
console.log(lang); 
for(var i = 1; i<arrays.length-1; i++) 
{ 
test = test + arrays[i].text+' '; 
} 
test=test+arrays[arrays.length-1].text; 
logs = test.split(" "); 
//console.log(logs); 

HTTP.post(url,{ 
    data: logs, 
    headers : headers 
}, function(error, response) { 

    if (error) { 
    console.log(error); 
    } else { 
    var results = JSON.parse(response.content); 

    for(i =0; i< results.domains.length; i++){ 
    if(results.domains[i].price == null) 
    { 
     results.domains[i].price = "undefined"; 
    } 
    if(results.domains[i].available == false) 
    { 
     results.domains[i].available = "false"; 
     TransToEnF.insert({domain: results.domains[i].domain, available: results.domains[i].available,definitive: results.domains[i].definitive,price: results.domains[i].price,currency: results.domains[i].currency, Buy:"Buy", lang:lang, translation:final}); 
    } 
     if(results.domains[i].available == true) 
    { 
     results.domains[i].available = "true"; 
     TransToEnT.insert({domain: results.domains[i].domain, available: results.domains[i].available,definitive: results.domains[i].definitive,price: results.domains[i].price,currency: results.domains[i].currency, Buy:"Buy", lang:lang, translation:final}); 
    } 
    } 
    } 
}); 
Typed.remove({}); 
})); 
}}); 

:私は、データはMongoの収集になり、サーバ側API呼び出しを持っている

//available domains 
Template.search.helpers({ 
    transToEnT: function(){ 
    return Session.get(TransToEnT.find()) ; 
    } 
}); 

Template.search.helpers({  //taken domains 
    transToEnF: function(){ 
    return TransToEnF.find(); 
    } 
}); 

残念ながら、1人以上のユーザーがいる場合は、いずれも同じテキストのフィールドを送信した後に同じ結果が表示されます。この問題を解決するための解決策はありますか?

答えて

0

コードを見ると、translateToEnが匿名ユーザーによって呼び出されていることがわかりました。私が間違っているなら私を訂正してください。

私が示唆しているのは、何らかの種類のランダムキーをクライアントに生成し、そのキーでデータを添付することです。

クライアントでは、トークンをCookieに保存できます。 MeteorのRandomパッケージを使用してランダムキーvar token = Random.id()を生成するか、Meteor.uuid()を使用することもできます。 Cookieの有効期限を(既定のチェックはSession only cookies with Javascript)と設定できます。

最後にユーザー場合tokenパラメータを受け入れてから、このトークン

Meteor.methods({ 
    translateToEn: function(token){ 
    check(token, String); 

    // 
    // do something and get result 
    // 

    TransToEnF.insert({ ... , token: token}); 

と店の文書がフィルタリングされた結果

Meteor.publish("translateToEn", function(token) { 
    check(token, String); 
    // send only filtered results; 
    return [ TransToEnF.find({token: token}), TransToEnT.find({token: token })] 
}); 

を取得するために発行する機能で同じトークンを渡すためにtranslateToEnを変更することができますあなたがuserIdの方法で確認し、公開機能this.userIdを定義する必要があります。セッションの場合はthis.connectionに添付されているhashedTokenを使用できます。そのためにはaccounts-baseパッケージを使用する必要があります。

接続するためのトークンが、これは

を助け

var token = Accounts._getLoginToken(this.connection.id); 

希望を使用して取得することができます

関連する問題