2013-09-22 8 views
5

ठीक है, तो मैं Meteor.js के साथ कुछ के बारे में थोड़ा उलझन में हूँ। मैंने विभिन्न अवधारणाओं का परीक्षण करने के लिए इसके साथ एक साइट बनाई, और यह ठीक काम किया। एक बार जब मैंने "असुरक्षित" और "ऑटोपublिश" हटा दिया, तो मुझे सर्वर को पुनर्प्राप्त करने और धक्का देने का प्रयास करते समय कई "पहुंच से वंचित" त्रुटियां मिल गईं। मैं belive यह निम्नलिखित स्निपेट के साथ कुछ है:Meteor.js प्रकाशन और सदस्यता लेना?

Template.posts.posts = function() { 
    return Posts.find({}, {sort: {time: -1}}); 
} 

मुझे लगता है कि यह सीधे संग्रह तक पहुँचने के लिए है, जो इसे "असुरक्षित" और "autopublish" सक्षम, के साथ लेकिन एक बार वे ऐसा करने के लिए अनुमति दी गई थी कोशिश कर रहा है अक्षम कर दिया गया था इसे पहुंच से वंचित कर दिया गया था। एक और टुकड़ा मुझे लगता है कि समस्याग्रस्त है:

else { 
    Posts.insert({ 
    user: Meteor.user().profile.name, 
    post: post.value, 
    time: Date.now(), 
}); 

मुझे लगता है कि बात यह है कि इसी प्रकार की हो रहा है: यह जो यह करने के लिए अनुमति नहीं है, सीधे संग्रह का उपयोग करने की कोशिश कर रहा है।

मेरा सवाल है, मैं इसे फिर से कारक कैसे बना सकता हूं ताकि मुझे "असुरक्षित" और "ऑटोप्ब्लिश" सक्षम न हो?

धन्यवाद।

संपादित

अंतिम:

/** 
* Models 
*/ 
Posts = new Meteor.Collection('posts'); 

posts = Posts 

if (Meteor.isClient) { 

    Meteor.subscribe('posts'); 


} 

if (Meteor.isServer) { 

    Meteor.publish('posts', function() { 
     return posts.find({}, {time:-1, limit: 100}); 
    }); 


    posts.allow({ 

     insert: function (document) { 
      return true; 
     }, 
     update: function() { 
      return false; 
     }, 
     remove: function() { 
      return false; 
     } 

    }); 

} 
+0

हाँ, आप घोषणा का जवाब देता "इस कार्रवाई की अनुमति नहीं है" वेरिएबल 'पोस्ट' लेकिन सर्वर पर 'पोस्ट' के साथ इसे एक्सेस करने का प्रयास करें। आपको टाइपो को सही करना चाहिए क्योंकि अब आपके पास एक प्रश्न है और कोड दिखा रहा है जो रन नहीं करेगा। – user728291

उत्तर

7

ठीक है, तो वहाँ इस सवाल का दो भागों हैं:

Autopublish

उल्का में डेटाबेस प्रकाशित करने के लिए, आप की जरूरत प्रोजेक्ट के दोनों सर्वर-साइड और क्लाइंट-साइड पर कोड रखने के लिए। मान लें कि आप संग्रह (Posts = new Meteor.Collection('posts')) instantiated है, तो आप ग्राहक

if (Meteor.isClient) { 
    Meteor.subscribe('posts', subsargs) //here is where you can pass arguments 
} 

असुरक्षित के लिए

if (Meteor.isServer) { 
    Meteor.publish('posts', function(subsargs) { 
     //subsargs are args passed in the next section 
     return posts.find() 
     //or 
     return posts.find({}, {time:-1, limit: 5}) //etc 
    }) 
} 

फिर जरूरत

असुरक्षित करने के उद्देश्य से ग्राहक अंधाधुंध जोड़ने के लिए अनुमति देने के लिए है किसी भी डेटाबेस प्रविष्टियों को संशोधित, संशोधित और हटा दें। हालांकि, ज्यादातर समय आप इसे नहीं चाहते हैं। एक बार जब आप असुरक्षित हटा देते हैं, तो आपको सर्वर पर नियमों को स्थापित करने की आवश्यकता होती है जो बताती है कि कौन कर सकता है। ये दो कार्य db.allow और db.deny हैं। जैसे

if (Meteor.isServer) { 
    posts.allow({ 
     insert:function(userId, document) { 
      if (userId === "ABCDEFGHIJKLMNOP") { //e.g check if admin 
       return true; 
      } 
      return false; 
     }, 
     update: function(userId,doc,fieldNames,modifier) { 
      if (fieldNames.length === 1 && fieldNames[0] === "post") { //they are only updating the post 
       return true; 
      } 
      return false; 
     }, 
     remove: function(userId, doc) { 
      if (doc.user === userId) { //if the creator is trying to remove it 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

इसी तरह, db.deny ठीक उसी तरह से व्यवहार करेंगे true की प्रतिक्रिया को छोड़कर, मतलब होगा

आशा इस आपके सभी सवालों

+0

जब आप कहते हैं 'डालें: फ़ंक्शन (उपयोगकर्ता आईडी, दस्तावेज़)' या 'अपडेट: फ़ंक्शन (उपयोगकर्ता आईडी, दस्तावेज़, फ़ील्ड नाम, संशोधक)', आप उन तर्कों को कैसे पारित करते हैं? और, क्या आप क्लाइंट या सर्वर से ऐसा करते हैं? –

+1

आप उन कार्यों को प्रति से कॉल नहीं करते हैं। उन्हें कुछ घटनाओं पर उल्का द्वारा बुलाया जाता है, और कॉलर द्वारा उन तर्कों को पारित किया जाता है। इसका कोई मतलब भी है क्या? – Zwade

+0

एमएमके, इसलिए उन्हें कुछ घटनाओं द्वारा बुलाया जाता है ... लेकिन मुझे यकीन नहीं है कि मैं समझता हूं कि तर्क कैसे पारित किए जाते हैं।क्या आप एक उदाहरण प्रदान कर सकते हैं (या लिंक) जहां क्लाइंट कोड का एक टुकड़ा सम्मिलित/अद्यतन/निकालें कार्यों को ट्रिगर करता है और तर्क पारित होते हैं? –

संबंधित मुद्दे