流星蒙戈会议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流星蒙戈会议相关的知识,希望对你有一定的参考价值。
我正在开发我的域生成应用程序,该应用程序提供不同语言的域名。
是否可以在用户会话中存储mongo集合?因此每个用户都可以看到不同的收集结果我有一个服务器端api调用,数据进入mongo集合:
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({});
}));
}});
我从客户端提交事件中调用此方法,如下所示:
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();
},
并使用帮助程序打印数据:
//available domains
Template.search.helpers({
transToEnT: function(){
return Session.get(TransToEnT.find()) ;
}
});
Template.search.helpers({ //taken domains
transToEnF: function(){
return TransToEnF.find();
}
});
不幸的是,如果有多个用户,他们都看到相同的结果,页面重新加载imediatly后,其中一个提交文本字段。你们有解决这个问题的解决方案吗?
答案
看看你的代码我可以看到translateToEn
被匿名用户调用。如我错了请纠正我。
如果是这种情况,我建议在客户端生成某种随机密钥并使用该密钥附加数据。
因此,在客户端,您可以将令牌存储在cookie中。您可以使用Meteor的Random
包生成随机密钥var token = Random.id()
,或者您也可以使用Meteor.uuid()
。您可以将cookie到期时间设置为Session
,这是此Session only cookies with Javascript的默认检查。
最后,您可以更改translateToEn
以接受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 })]
});
如果用户已登录,则应检查方法中的userId
,并定义发布函数this.userId
。对于会话,您可以使用附加到hashedToken
的this.connection
。你需要使用accounts-base
包。
可以使用检索连接令牌
var token = Accounts._getLoginToken(this.connection.id);
希望这可以帮助
以上是关于流星蒙戈会议的主要内容,如果未能解决你的问题,请参考以下文章