2013-01-02 5 views
6

Sto lavorando su un blog di base in Express.js. Dire che ho percorso la struttura come questa:Utilizza una route come alias per un'altra route in Express.js

/blog/page/:page 

Vorrei anche un percorso /blog che è essenzialmente un alias per /blog/page/1. Come posso gestirlo facilmente in Express?

Tutti i percorsi sono definiti come tali:

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

risposta

13

Usa res.redirect dire al browser per reindirizzare a /blog/page/1:

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

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

utilizzare un gestore percorso condiviso e di default a pagina 1, se il parametro page non è passato:

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

Ciò causerà un cambiamento del URL del browser. Puoi invece utilizzare connect-modrewrite per riscrivere l'url. https://github.com/tinganho/connect-modrewrite?source=c – einstein

+1

Correggere @einstein tuttavia non è necessario quando si utilizzano percorsi espressi. È possibile utilizzare regex per abbinare, o anche passare un array, vedere qui: http://stackoverflow.com/questions/15350025/express-js-single-routing-handler-for-multiple-routes-in-a-single- linea – TMPilot

+2

downvoted in quanto richiede un altro round trip. Non è una buona soluzione. –