這個問題沒有明確的答案,答案取決於你的應用程序規模和所涉及的團隊,爲了儘量靈活,Express在結構方面沒有作出任何假設。git
在你喜歡的任何目錄結構中,路由和其餘特定於應用程序的邏輯能夠存在於你但願的任意數量的文件中,查看如下示例以獲取靈感:github
此外,還有Express的第三方擴展,簡化了其中一些模式:數據庫
Express沒有數據庫的概念,此概念由第三方Node模塊決定,容許你與幾乎任何數據庫進行交互。express
請參閱LoopBack,瞭解以模型爲中心的基於Express的框架。segmentfault
身份驗證是Express不會冒險的另外一個有爭議的領域,你能夠使用任何你想要的身份驗證方案,有關簡單的用戶名/密碼方案,請參閱此示例。緩存
Express支持符合(path、locals,callback)簽名的任何模板引擎,要規範化模板引擎接口和緩存,請參閱consolidate.js項目以獲取支持,未列出的模板引擎可能仍然支持Express簽名。併發
有關更多信息,請參閱使用Express的模板引擎。mvc
在Express中,404響應不是錯誤的結果,所以錯誤處理程序中間件不會捕獲它們,這種行爲是由於404響應只是代表沒有額外的工做要作,換句話說,Express已經執行了全部中間件函數和路由,並發現它們都沒有響應,你須要作的就是在堆棧的最底部添加一箇中間件函數(在全部其餘函數之下)來處理404響應:app
app.use(function (req, res, next) { res.status(404).send("Sorry can't find that!") })
在express.Router()
實例上的運行時動態添加路由,這樣路由不會被中間件函數取代。框架
你能夠使用與其餘中間件相同的方式定義錯誤處理中間件,除了使用四個參數而不是三個參數,具體的簽名(err, req, res, next)
:
app.use(function (err, req, res, next) { console.error(err.stack) res.status(500).send('Something broke!') })
有關更多信息,請參閱錯誤處理。
沒有必要使用res.render()
函數「渲染」HTML,若是你有特定文件,請使用res.sendFile()
函數,若是要從目錄提供許多資源,請使用express.static()
中間件函數。