所以我喜欢使用匿名函数进行编码,Meteor.methods为我打破了这一点。所以我创建了一个像这样的Meteor.Methods
// SERVER SIDE
Meteor.startup(function () {
// code to run on server at startup
//expose server methods.
Meteor.methods({
_SERVER_ : function(args){
try{
var funcStr = args.func.split("."); //split on the function parameter
var scopeStr = funcStr[0]; //get the scope of the function
funcStr.splice(0,1); //remove the scope and get the deep path
var path = funcStr.join("."); //join the array and stick it with "."
console.log("util.funcString("+ scopeStr +","+ path +")(" + args.data + ");");
if( myapp.hasOwnProperty(scopeStr) ) //see if the function exist on myapp object
{
var scope = myapp[scopeStr]; //get the scope of the function
var response = util.funcString(scope, path)(args.data); //execute the function
console.log("myapp :" + args.func);
return response;
}else{
return "myapp don't have the method: " + args.func;
}
}catch(e){
return "myapp has a wtf moment and its saying:" + e;
}
}
});
});
所以这个函数非常期待来自客户端的这样的调用。它会打电话给myapp.page.add
// CLIENT SIDE
Meteor.call("_SERVER_",{
func : "pages.add",
data : page
},function(err, value){
insertNewPage(err,value);
});
现在的好处是我可以像这样在服务器端创建一个函数。
// SERVER SIDE
myapp.page = (function(){
var privateVar = "private";
//private
function doSomething(){
}
//public via the return object
function add(){
console.log("called from client side");
}
return{
add : add
}
})();
现在我的应用程序更像是模块化的,可以在不同的文件中拆分非常简单,并创建你想要的任何命名空间。
问题我是否打破任何METEOR规则?它不安全吗?这是一个坏主意?任何建议都是受欢迎的,我在Meteor中还是新手。
感谢
答案 0 :(得分:2)
你可以替换它:
myapp.page = (function(){
var privateVar = "private";
//private
function doSomething(){
}
//public via the return object
function add(){
console.log("called from client side");
}
return{
add : add
}
})();
使用:
myapp.page = (function(){
var privateVar = "private";
//private
function doSomething(){
}
//public via the return object
function add(){
console.log("called from client side");
}
Meteor.methods({
"page.add": add
});
})();
如果您想使用Meteor.call("page.add", arg1, arg2)
调用您的方法。
此外,由于Meteor会自动在文件之间调整您的变量范围,因此您不需要在privateVar周围进行闭包。
答案 1 :(得分:1)
你正在做的是混淆Meteor努力工作的事情:让开发人员更简单。 Meteor为您提供了最简单,最直接的方式来完成我自C早期以来所看到的事情。您只需编写干净的代码来做您想做的事情。 Meteor通过网络应用程序实现这一点,这是一件非常美好的事情。
底线:如果您在Meteor代码中添加间接层,则可能会过度思考问题。放轻松。 :-)将客户端内容保存在client /,服务器中的服务器内容以及它们之外的共享内容。享受简约。