2013-01-02 38 views
6

में किसी अन्य रूट के लिए उपनाम के रूप में एक मार्ग का उपयोग करें I Express.js में एक मूल ब्लॉग पर काम कर रहा हूं। मैं इस तरह मार्ग संरचना है कहते हैं:Express.js

/blog/page/:page 

मैं करूंगा भी एक /blog मार्ग अनिवार्य रूप से /blog/page/1 के लिए एक उपनाम है कि तरह। एक्सप्रेस में इसे आसानी से कैसे संभाला जा सकता है? एक साझा मार्ग हैंडलर और पेज 1 करने के लिए डिफ़ॉल्ट अगर page परम

app.get('/blog', function(req, res) { 
    res.redirect('/blog/page/1'); 
}); 

app.get('/blog/page/:page', function(req, res) { 
    //logic 
}); 

उपयोग: /blog/page/1 पर रीडायरेक्ट करने ब्राउज़र को बताने के लिए

app.get('/path', function(req, res) { 
    //logic 
}); 

उत्तर

13

उपयोग res.redirect:

सभी मार्गों इस तरह की तरह परिभाषित कर रहे हैं पास नहीं हुआ है:

function blogPageHandler(req, res) { 
    var page = req.params.page || 1; 
    //logic 
} 

// Define separate routes 
app.get('/blog/page/:page', blogPageHandler); 
app.get('/', blogPage); 

// or combined, by passing an array 
app.get(['/', '/blog/page/:page'], blogPageHandler); 

// or using optional regex matching (this is not recommended) 
app.get('/:_(blog/)?:_(page/)?:page([0-9]+)?', blogPageHandler); 
+7

इससे परिवर्तन होगा ब्राउज़र का यूआरएल आप इसके बजाय यूआरएल को फिर से लिखने के लिए कनेक्ट-मॉड्रूराइट का उपयोग कर सकते हैं। https://github.com/tinganho/connect-modrewrite?source=c – einstein

+1

सही @ आइंस्टीन हालांकि एक्सप्रेस मार्गों का उपयोग करते समय यह आवश्यक नहीं है। आप मिलान करने के लिए रेगेक्स का उपयोग कर सकते हैं, या यहां तक ​​कि एक सरणी भी पास कर सकते हैं, यहां देखें: http://stackoverflow.com/questions/15350025/express-js-single-routing-handler-for-multiple-routes-in-a-single- लाइन – TMPilot

+2

डाउनवॉटेड क्योंकि इसे एक और राउंड-ट्रिप की आवश्यकता है। अच्छा समाधान नहीं है। –