sekai_no_suda
sekai_no_suda

Reputation: 473

How to ignore specific files to be loaded when I use route parameters in Express

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

Answers (1)

jfriend00
jfriend00

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

Related Questions