我现在正在处理我的 Express 应用程序中反复出现的问题,即如果请求一个不存在的静态文件,我的应用程序将返回我的默认索引作为该文件。
我在 app.js 中路由的简短版本是这样的:
const index = require('./routes/index');
app.use(express.static(path.join(__dirname, 'public')));
app.use('/*', index);
app.use((req, res, next) => {
console.log("DIDN'T FIND A FILE");
const err = new Error('Not Found');
err.status = 404;
next(err);
});
问题是我永远不会得到错误或打印,因为通配符将始终为我的索引路由器服务。
服务器为请求报告 200,在客户端我得到内容为 index.html 的丢失文件。
我想要通配符,以便我可以将错误的 url 重定向到主页。这里唯一的解决方案是在请求上运行正则表达式并猜测它是否应该是一个文件然后手动返回 404?
我能看到这种工作的唯一方法是,如果您以某种方式表示知道哪些 url 应该是静态文件,哪些应该由您的通配符处理。
例如,给定 path: /not_a_file
,静态中间件将在 public 文件夹中查找并找不到它。那么这是404
通配符处理的一个或其他东西吗?
这可能不是您所希望的,但解决此问题的一种方法是将所有静态文件放在特定路径上并使用该fallthrough
选项。例如,如果您像这样设置静态:
app.use('/static', express.static(path.join(__dirname, 'public'), {fallthrough:false}));
现在,/static/index
如果索引存在,/static/not_here
则requests将为索引提供服务,并且会导致您的错误。您的通配符将接收对所有其他路径的请求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句