这个问题没有明确的答案,答案取决于你的应用程序规模和所涉及的团队,为了尽量灵活,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()
中间件函数。