2013-05-19 18 views
15

Tüm benzersiz URL'leri ana sayfama yönlendirmek istiyorum. Yani. Birisi www.mysite.com/blah/blah/blah/foo/bar veya www.mysite.com/invalid_url gider - Ben Açıkçası benim geçerli URL'lerin müdahale etmek istemiyoruz www.mysite.comEşsiz tüm URL'leri Express ile nasıl yönlendiririm?

yönlendirmez istiyorum.

Bu geçersiz URL'lere istekleri yeniden yönlendirmek için kullanabileceğim bazı joker eşleştiriciler var mı?

cevap

15

Sen Ekspres zincirindeki son katman/rota olarak bir 'bütün yakalamak' ortakatmanını ekleyebilirsiniz:

//configure the order of operations for request handlers: 
app.configure(function(){ 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.static(__dirname+'/assets')); // try to serve static files 
    app.use(app.router);       // try to match req with a route 
    app.use(redirectUnmatched);     // redirect if nothing else sent a response 
}); 

function redirectUnmatched(req, res) { 
    res.redirect("http://www.mysite.com/"); 
} 

... 

// your routes 
app.get('/', function(req, res) { ... }); 
... 

// start listening 
app.listen(3000); 

Özel bir 404 Not Found sayfasını oluşturmak için böyle bir kurulumu kullanır.

+0

Bu robiti tanıdığınızı biliyorum, ancak hiyerarşiyi hızlı bir yapılandırmada göstermek isteyebilirsiniz, böylece bunları doğru sırada almaları gerekir. sadece bir öneri. – origin1tech

+0

@ C.Hazelton bu yüzden yorumları ekledim. Yeterince açık değil mi? Daha fazla :) :) – robertklep

+0

eklemek için mutlu olurdu sadece bir öneriye yorum olarak söylüyordum. – origin1tech

24

Rotanızdaki diğer rotaların sonuna bir rota ekleyin.

app.all('*', function(req, res) { 
    res.redirect("http://www.mysite.com/"); 
}); 
+0

"Tümü" ni kullanabileceğinizi bilmiyordum. İyi cevap. – Riwels

+3

Eğer böyle bir rota eklerseniz, 'middle.static' gibi rotalarınızdan sonra kullanmak istediğiniz herhangi bir ara yazılım, o middleware bildiriminden sonra [app.all'ı dahil etseniz bile asla çağrılmayacaktır. ] (https://gist.github.com/robertklep/5608473)). Bir sorun olmayabilir ama kafa karıştırıcı olabilir. – robertklep

İlgili konular