# 常问问题
# 应该如何构建我的应用程序?
这个问题没有确定的答案。答案取决于您的应用程序的规模和所涉及的团队。为了尽可能灵活,Express 在结构方面不做任何假设。
路由和其他特定于应用程序的逻辑可以存在于您喜欢的任何目录结构中的任意数量的文件中。查看以下示例以获得灵感:
路由列表
路由映射
MVC 风格控制器
此外,Express 还有第三方扩展,可以简化其中一些模式:
资源丰富的路由
# 如何定义模型?
Express 没有数据库的概念。这个概念留给第三方 Node 模块,允许您与几乎任何数据库进行交互。
有关以模型为中心的基于 Express 的框架,请参见 LoopBack
。
# 如何验证用户身份?
身份验证是 Express 不会涉足的另一个固执己见的领域。您可以使用任何您希望的身份验证方案。有关简单的用户名/密码方案,请参阅 这个例子
。
# Express 支持哪些模板引擎?
Express 支持任何符合 (path, locals, callback)
签名的模板引擎。要规范模板引擎接口和缓存,请参阅 consolidate.js
项目以获得支持。未列出的模板引擎可能仍支持 Express 签名。
有关详细信息,请参阅 使用 Express 模板引擎
。
# 如何处理 404 响应?
在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件不会捕获它们。这种行为是因为 404 响应只是表明没有额外的工作要做;也就是说,Express 已经执行了所有的中间件函数和路由,发现没有一个响应。您需要做的就是在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应:
app.use((req, res, next) => {
res.status(404).send("Sorry can't find that!")
})
在运行时在 express.Router()
的实例上动态添加路由,这样路由就不会被中间件函数取代。
# 如何设置错误处理程序?
您定义错误处理中间件的方式与其他中间件相同,不同之处在于使用四个参数而不是三个;特别是签名(err, req, res, next)
:
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Something broke!')
})
有关详细信息,请参阅 错误处理
。
# 如何呈现纯 HTML?
你不需要!不需要使用 res.render()
函数 "render" HTML。如果您有特定文件,请使用 res.sendFile()
函数。如果您从一个目录提供许多资产,请使用 express.static()
中间件函数。