我有一个节点App。配置为通过以下方式提供静态文件:
app.use(express.static(path.join(__dirname, '../public')));
我在其他路线上使用了一些auth中间件。当我点击服务器上不存在的图像时出现问题。在这种情况下,快递似乎试图通过我对非静态内容的所有中间件发送该请求。
有没有办法只发送404丢失的静态资产,而不是重新触发每个丢失文件的所有中间件?
答案 0 :(得分:6)
express.static()
中间件默认工作的方式是它在目标目录中查找文件,如果找不到,则将其传递给下一个中间件。
但是,它有fallthrough
选项,如果你将它设置为false
,那么它将立即404任何应该在静态目录中的丢失文件。
下通
当此选项为true时,客户端错误,例如错误的请求或 对不存在的文件的请求将导致此中间件简单 调用next()来调用堆栈中的下一个中间件。当假, 这些错误(甚至是404s)将调用next(错误)。
将此选项设置为true,以便映射多个物理目录 到相同的网址或路由以填写不存在的文件。
如果已将此中间件安装在设计为的路径上,请使用false 严格的单个文件系统目录,允许 短路404s以减少开销。这个中间件也会 回复所有方法。
示例:
app.use("/public", express.static("/static", {fallthrough: false}));