Reputation: 473
When I make a GET request with route parameters in express with mongoose like the following code, I sometimes see that the browser tries to load some unexpected files such as favicon.ico
, robots.txt
, humans.txt
, sitemap.xml
, ads.txt
, etc., and 404 error shows up in the browser console.
app.get("/:userId", ...);
By refering to this Q&A, I figured out that if I don't use the route parameters right after the root route like the following code, it doesn't happen.
app.get("/user/:userId", ...);
In the same Q&A, however, there seem to be another way that uses req.url
to ignore those unexpected files to be loaded, but it isn't explained in detail.
How do you do that?
Upvotes: 0
Views: 436
Reputation: 707288
All that's meant in that other answer is that you could examine req.url
in your route handler and make sure it is not a known special name. In this specific case, it's probably simpler to use req.params.userId
instead of req.url
, but you could also use req.url
in the same way.
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
});
Personally, I wouldn't recommend this solution because it presupposes a perfect knowledge of all possible special filenames. I don't use a top level wildcards ever because they ruin the ability to use your server for anything else.
Upvotes: 2