微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Express 中使用路由参数时如何忽略要加载的特定文件

如何解决在 Express 中使用路由参数时如何忽略要加载的特定文件

当我像下面的代码一样使用 mongoose 在 express 中使用 route parameters 发出 GET 请求时,我有时会看到浏览器尝试加载一些意外的文件,例如 favicon.icorobots.txthumans.txtsitemap.xmlads.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 举报,一经查实,本站将立刻删除。