所以我喜歡使用匿名函數進行編碼,而Meteor.methods會爲我打破這一點。所以,我創建了一個Meteor.Methods這樣Meteor.Methods在一個函數中,可能的架構解決方案
//服務器端
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
//客戶端
Meteor.call("_SERVER_",{
func : "pages.add",
data : page
},function(err, value){
insertNewPage(err,value);
});
的好處是現在我可以在服務器端這樣創建一個函數。
//服務器端
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
}
})();
而且我的應用程序現在它更像是模塊化的,可在不同的文件和創建任何你想要的名稱空間分開很簡單。
問題DO我打破任何METEOR規則?它不是安全的?它是一個壞主意?任何建議都是值得歡迎的,我在Meteor還是個新手。
THANKS
你知道你可以多次調用Meteor.methods嗎?所以你可以用'Meteor.methods({「pages.add」:function(){.... something ...}});' – stubailo 2014-10-21 23:40:42
複製上面的'我沒有,這就是爲什麼我問。 – ncubica 2014-10-21 23:48:18
但仍然需要爲每個函數聲明Meteor.Methods中的方法。它不僅僅是一次呼籲在客戶端統治他們。 – ncubica 2014-10-21 23:49:57