2012-08-03 17 views
18

मैं विभिन्न के लिए रीयलटाइम लॉगिंग एप्लिकेशन के लिए मीटियर का उपयोग करने की योजना बना रहा हूं, मेरी आवश्यकता बहुत सरल है, मैं एक लॉग पास करूंगा क्योंकि अनुरोध के रूप में संदेश विभिन्न अनुप्रयोगों से पैरामीटर (पोस्ट या जीईटी) और उल्का को बस संग्रह को अपडेट करने की आवश्यकता है। मुझे मेटीर सर्वर कोड में अनुरोध पैरामीटर्स तक पहुंचने और आने वाले लॉग मैसेज के साथ मोंगो संग्रह अपडेट करने की आवश्यकता है। मैं सीधे मौजूदा अनुप्रयोगों से मोंगो संग्रह अपडेट नहीं कर सकता, इसलिए कृपया इसका कोई सुझाव नहीं दे रहा है। मैं जानना चाहता हूं कि मैं इसे मेटियर फ्रेमवर्क से कैसे कर सकता हूं और अधिक पैकेज जोड़कर ऐसा नहीं कर सकता।मैं उल्का में अनुरोध पैरामीटर्स का उपयोग कैसे करूं?

+0

मुझे यकीन है कि अगर यह अंतर्निहित Node.js उदाहरण का उपयोग करने के लिए संभव है नहीं कर रहा हूँ। लेकिन अगर आप इसे किसी भी तरह पकड़ सकते हैं, तो एक त्वरित 'app.post ('/', फ़ंक्शन (अनुरोध, प्रतिक्रिया) {});' चाल चल जाएगा। हालांकि एक विचार हालांकि, मुझे यह नहीं पता कि यह संभव है या नहीं। –

उत्तर

0

चीजें खड़े होने पर, यूआरएल हिट होने पर सर्वर साइड रूटिंग या सर्वर पक्ष पर विशिष्ट कार्रवाइयों के लिए समर्थन नहीं है। तो आप जो करना चाहते हैं उसे करना आसान नहीं है। यहाँ कुछ सुझाव हैं।

  1. आप शायद प्राप्त कर सकते हैं कि आप क्या तकनीक है कि प्रमाणन शाखा पर oauth2 पैकेज द्वारा उपयोग किया जाता उधार हैं: https://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100-109

    हालांकि यह वास्तव में इतना समर्थित नहीं है मैं इसे एक अच्छा है कुछ नहीं कर रहा हूँ विचार।

  2. आपके अन्य एप्लिकेशन वास्तव में डीडीपी का उपयोग करके संग्रह को अपडेट कर सकते हैं। यह शायद लगता है की तुलना में यह आसान है।

  3. आप एक मध्यवर्ती आवेदन का उपयोग कर सकते हैं जो POST/GET अनुरोध स्वीकार करता है और डीडीपी का उपयोग करके आपके उल्का सर्वर से बात करता है। यह संभवतः तकनीकी रूप से सबसे आसान काम है।

+0

दरअसल, उल्का राउटर _does_ सर्वर-साइड मार्गों को अधिक आम क्लाइंट-साइड के अलावा संभालता है। अपने github पृष्ठ पर दस्तावेज़ देखें: https://github.com/tmeasday/meteor-router –

+1

हाहा, आप बिल्कुल सही हैं, लेकिन जब मैंने यह उत्तर लिखा था तो मैंने अभी तक राउटर को कार्यक्षमता नहीं जोड़ा है;) –

9

मैं करने के लिए एक वैकल्पिक हल उल्का आवेदन कस्टम अनुरोधों को हैंडल करने के लिए एक रूटर जोड़ने पाया।

यह कनेक्ट राउटर मिडलवेयर का उपयोग करता है जो उल्का के साथ भेज दिया जाता है। कोई अतिरिक्त निर्भरता नहीं!

सर्वर पर Meteor.startup को पहले/बाहर रखें। (Coffeescript)

SomeCollection = new Collection("...") 
fibers = __meteor_bootstrap__.require("fibers") 
connect = __meteor_bootstrap__.require('connect') 
app = __meteor_bootstrap__.app 

router = connect.middleware.router (route) -> 
    route.get '/foo', (req, res) -> 
    Fiber() -> 
     SomeCollection.insert(...) 
    .run() 
    res.writeHead(200) 
    res.end() 
app.use(router) 
+0

इसे docs.meteor.com पर दस्तावेज किया जाना चाहिए (कम से कम एक अधिक आधिकारिक समाधान समाप्त होने तक :) @Geoff –

+0

यदि आप स्वचालित क्वेरी और बॉडी पार्सिंग का उपयोग करना चाहते हैं तो निम्न जोड़ें: app.use (connect.query()) .use (connect.bodyParser()) –

+1

नोट: 0.6.0 के रूप में यह काम नहीं करेगा - हालांकि एनपीएम.रेक्वायर ('...') देखें; – emgee

12

संपादित करें:Iron Router, उल्का रूटर के उत्तराधिकारी के उपयोग करने के लिए अपडेट किया गया।

Install Iron Router और सर्वर की ओर से मार्ग को परिभाषित:

Router.map(function() { 
    this.route('foo', { 
    where: 'server', 
    action: function() { 
     doSomethingWithParams(this.request.query); 
    } 
    }); 
}); 
http://yoursite.com/foo?q=somequery&src=somesource तरह के अनुरोध के लिए

तो, चर this.request.query समारोह में ऊपर { q: 'somequery', src: 'somesource' } होगा और इसलिए आप this.request.query.q और this.request.query.src के माध्यम से अलग-अलग मानकों का अनुरोध कर सकते और जैसे। मैंने केवल अनुरोधों का परीक्षण किया है, लेकिन पोस्ट और अन्य अनुरोध प्रकारों को समान रूप से काम करना चाहिए; यह उल्का 0.7.0.1 के रूप में काम करता है। सुनिश्चित करें कि आप इस कोड को Meteor.isServer ब्लॉक या अपनी परियोजना में /server फ़ोल्डर में फ़ाइल में डाल दें।

मूल पोस्ट:

उपयोग MeteoriteMeteor Router स्थापित करने और एक सर्वर साइड मार्ग को परिभाषित करने के: समारोह में, http://yoursite.com/foo?q=somequery&src=somesource तरह के अनुरोध के लिए

Meteor.Router.add('/foo', function() { 
    doSomethingWithParams(this.request.query); 
}); 

तो चर this.request.query उपरोक्त { q: 'somequery', src: 'somesource' } होगा और इसलिए आप this.request.query.q के माध्यम से व्यक्तिगत मानकों का अनुरोध कर सकते हैं nd this.request.query.src और इसी तरह। मैंने केवल अनुरोधों का परीक्षण किया है, लेकिन पोस्ट और अन्य अनुरोध प्रकारों को समान रूप से काम करना चाहिए; यह उल्का 0.6.2.1 के रूप में काम करता है। सुनिश्चित करें कि आप इस कोड को Meteor.isServer ब्लॉक या अपनी परियोजना में /server फ़ोल्डर में फ़ाइल में डाल दें।

मैं जानता हूँ कि प्रश्नकर्ता संकुल जोड़ने के लिए नहीं चाहता है, लेकिन मुझे लगता है Meteorite का उपयोग कर स्थापित करने के लिए है कि Meteor Router मेरे लिए एक भविष्य के लिए अधिक सबूत के रूप में __meteor_bootstrap__ की तरह आंतरिक अप्रलेखित उल्का वस्तुओं तक पहुँचने की तुलना में इस लागू करने के लिए जिस तरह से लगता है। जब पैकेज एपीआई को मौसम के भविष्य के संस्करण में अंतिम रूप दिया जाता है, तो उल्का राउटर स्थापित करने की प्रक्रिया आसान हो जाएगी (उल्कापिंड की आवश्यकता नहीं है) लेकिन कुछ भी बदलने की संभावना नहीं है और आपका कोड शायद संशोधन की आवश्यकता के बिना काम करना जारी रखेगा।

+0

आयरन राउटर के रूप में> = 1.0, 'this.request.query' को' this.params.query' – mrkre

+0

@ जेफ्री-बूथ के लिए बहिष्कृत किया गया है, मैं जीएसएम ढाल से डेटा भेजने की कोशिश कर रहा हूं और कोड की इस पंक्ति में एक है मुझे बस इसे एक पोस्ट के लिए स्विच करना होगा, हालांकि 'Meteor.call (' POST '' या आयरन राउटर पहले से ही इसका निपटारा कर रहा है? 'Char अनुरोध [] = "GET /test-get-post.php प्राप्त करें ? ए = 1 और बी = 2 HTTP/1.1 \ r \ nहोस्ट: test.libelium.com \ r \ n सामग्री-लंबाई: 0 \ r \ n \ r \ n "; ' – mjwrazor

2

उपयोग IronRouter, यह बहुत आसान है:

var path = IronLocation.path(); 
संबंधित मुद्दे