0

当我使用mongoose以 express 方式发出 GET 请求时,如以下代码所示,有时我会看到浏览器尝试加载一些意外文件,例如favicon.icorobots.txthumans.txtsitemap.xmlads.txt等,并且在浏览器控制台中显示 404 错误。

app.get("/:userId", ...);

通过参考这个 Q&A,我发现如果我没有像下面的代码那样在根路由之后使用路由参数,它就不会发生。

app.get("/user/:userId", ...);

然而,在同一个问答中,似乎还有另一种方法可以req.url用来忽略那些意外加载的文件,但没有详细解释。你是怎样做的?

4

1 回答 1

1

其他答案的所有含义是您可以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 
});

就我个人而言,我不会推荐这种解决方案,因为它预设了对所有可能的特殊文件名的完美了解。我从不使用顶级通配符,因为它们破坏了将您的服务器用于其他任何事情的能力。

于 2021-01-23T03:15:33.270 回答