2013-07-18 2 views
18

मैं अपने एक्सप्रेस आवेदन पर कुछ प्राप्त मार्गों मिल गया है कहते हैं:नोड.जेएस एक्सप्रेस मार्ग नामकरण और ऑर्डरिंग: प्राथमिकता कैसे निर्धारित की जाती है?

// music albums 
app.get('/api/albums', routes.albums.getAlbums); 
app.get('/api/albums/:id', routes.albums.getAlbum); 
app.get('/api/albums/artwork', routes.albums.getAlbumArtwork); 

और मैं पालन jQuery AJAX के स्निपेट का उपयोग कर उन्हें हिट करने के लिए प्रयास करते हैं:

$("#retrieveAlbumArtwork").on("click", function() { 
    $.ajax({ 
     url: "api/albums/artwork", 
     type: "GET", 
     data: { 
      artist: $("#albumArtist").val(), 
      title: $("#albumTitle").val() 
     }, 
     // ... callbacks and such 

किसी कारण के लिए, यह कॉल हिट /:id पैरामीटर के साथ, दूसरे हैंडलर, स्पष्ट /artwork मार्ग के बजाय। उन्हें स्वैप करने से उन्हें अपेक्षित कार्य करने की सुविधा मिलती है:

// music albums 
app.get('/api/albums', routes.albums.getAlbums); 
app.get('/api/albums/artwork', routes.albums.getAlbumArtwork); 
app.get('/api/albums/:id', routes.albums.getAlbum); 

क्या कोई यह समझा सकता है कि यह क्यों हो रहा है? मुझे लगता है कि एक्सप्रेस एक क्वेरी पैरािंग (/albums/artwork?artist=artistName&title=albumTitle) बनाम एक आईडी पैरा (/albums/23453243) की पहचान करने के लिए पर्याप्त स्मार्ट होगा और उचित रूप से मार्ग होगा, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है?

उत्तर

18

नहीं, यह नहीं है। :id कुछ भी मिल जाएगा। तो /api/albums/artwork उस मैच के लिए पूरी तरह से मान्य है। एक्सप्रेस RegExp मैच का भी समर्थन करता है। तो आप RegExp का उपयोग कर एक स्पष्ट संख्यात्मक मिलान मार्ग बना सकते हैं।

एक अन्य विकल्प app.param उपयोग कर रहा है के रूप में API दस्तावेज़ यहाँ http://expressjs.com/api.html#app.param

यह आप /api/albums/:albumId जैसी URL जहां :albumId सांख्यिक हो गया है हो सकता था रूटर के लिए पैरामीटर मिलान को परिभाषित करने की अनुमति देता है के साथ बताएं, आप यदि आप चाहें तो इस बिंदु पर albumId भी मान्य कर सकते हैं।

लेकिन सभी तरह से, आप इसे सामान्य रूप से सामान्य तरीके से कर रहे हैं, आम तौर पर मैंने शीर्ष पर स्थिर मार्ग, फिर गतिशील मार्ग, सभी को पकड़ लिया, फिर त्रुटि हैंडलर लगाए।

+1

हाँ, दूसरा तरीका टीजे होलोवाचुक (एक्सप्रेस का निर्माता) उनके उदाहरणों में उपयोग करता है: https://github.com/visionmedia/express/blob/master/examples/route-separation/index.js#L29 – verybadalloc

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