Express@4.18.2下载仅含扩展名文件时出现NotFoundError求助
问题分析与解决方法
这不是Bug,是Express底层依赖的send模块的默认行为导致的——默认会拒绝访问以.开头的文件(即dotfiles),不管文件名是否只有扩展名(比如.gitignore、.prettierrc都属于这类文件),而普通命名文件(如t.txt)不受限制。
解决步骤:
- 如果是直接使用
res.download(),可以用res.sendFile()替代并显式开启dotfiles访问权限(res.download()未直接暴露该配置项):const path = require('path'); // 替换原res.download('../.gitignore')的写法 res.sendFile(path.resolve('../.gitignore'), { dotfiles: 'allow' }, (err) => { if (err) { // 按需处理错误,比如传递给错误中间件 next(err); } }); - 如果同时使用
express.static中间件托管静态文件,需要在配置中指定dotfiles选项:app.use(express.static('your-static-dir', { dotfiles: 'allow' }));
补充说明:
Express默认忽略dotfiles是出于安全考量,防止敏感配置文件(如.env、.gitignore)被意外暴露。只有在确认需要提供这类文件下载权限时,才建议修改上述配置,否则保持默认设置更安全。
内容的提问来源于stack exchange,提问作者Nicolas Stadler
相关产品推荐
相关产品推荐

