2012-11-06 83 views
27

當我創建使用快速二進制樣本Express應用程序,引導代碼有幾行:在Express中,app.router究竟做了什麼?

... 

var app = express(); 
... 
app.use(app.router); 

我沒有找到很多關於app.router。我認爲這是處理路由(app.get(),app.post()等)規則的中間件,但是當我移除app.use(app.router)時,這些規則也會被執行。線。

那麼這個中間件的確切含義是什麼?

+1

如果你沒有明確定義它,express會在遇到app.verb時爲你做。 – Pickels

+0

很好的答案在這裏http://stackoverflow.com/questions/12695591/node-js-express-js-how-does-app-router-work – IvanM

+2

截至表4,app.use(app.router)被刪除。請參閱文檔https://github.com/visionmedia/express/wiki/New-features-in-4.x –

回答

15

這是從快車2.x的導向http://expressjs.com/2x/guide.html

「注意使用app.router的,這可以(任選地)用於安裝 應用路由,否則到應用程序中的第一個呼叫。 get(), app.post()等將安裝路由。「

我懷疑這也適用於Express 3.x。

36

在Express 3.x中,app.router是connect middleware router的增強版。赫克託說,這是爲快速處理與app.getapp.post註冊請求處理程序等

如果你不叫app.use(app.router)明確表示隨後會調用它隱含的第一次使用app.get(...)app.post(...)等。但是,你可能需要明確地指定.use,因爲那樣你就選擇了所有中間件的順序。

app.use(express.favicon()); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
// app.get, app.post, etc called before static folder 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

看看如何在Express 3源here檢索路由器。

請注意,Express 4 doesn't need app.router

+4

我明白爲什麼@Zsombor接受了另一個答案,這是他提出問題時唯一的答案,但是這個答案要好得多,因爲它突出顯示了您希望顯式調用app.router的主要原因,即控制訂單安裝。 –

0

這種方法已經不再被

爲什麼我們使用路由器..because的,我們需要我們的子應用程序連接到我們的主要的應用程序。