如何解决在 Express 中使用路由参数时如何忽略要加载的特定文件
当我像下面的代码一样使用 mongoose 在 express 中使用 route parameters 发出 GET 请求时,我有时会看到浏览器尝试加载一些意外的文件,例如 favicon.ico
、robots.txt
、 humans.txt
、sitemap.xml
、ads.txt
等,并且 404 错误显示在浏览器控制台中。
app.get("/:userId",...);
通过引用 this Q&A,我发现如果我不像下面的代码那样在根路由之后立即使用路由参数,它就不会发生。
app.get("/user/:userId",...);
不过,在同一个问答中,似乎还有另一种方式使用req.url
来忽略那些意外加载的文件,但没有详细说明。
你是怎么做到的?
解决方法
在另一个答案中的意思是,您可以在路由处理程序中检查 req.url
并确保它不是已知的特殊名称。在这种特定情况下,使用 req.params.userId
而不是 req.url
可能更简单,但您也可以以相同的方式使用 req.url
。
const specials = new Set(["favicon.ico","robots.txt","humans.txt","sitemap.xml","ads.txt"]);
app.get("/:userId",(res,res,next) => {
// if it's a special URL,then skip it here
if (specials.has(req.params.userId)) {
next();
return;
}
// process your route here
});
就我个人而言,我不会推荐此解决方案,因为它预设了对所有可能的特殊文件名的完美了解。我从不使用顶级通配符,因为它们破坏了将您的服务器用于其他任何用途的能力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。