0

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?

sekai_no_suda
  • 413
  • 4
  • 11

1 Answers1

2

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.

jfriend00
  • 683,504
  • 96
  • 985
  • 979
  • @sekai_no_suda - Did this answer your question? If so, you could indicate that to the community here by clicking the checkmark to the left of the answer and that will also earn you some reputation points here for following the proper procedure. – jfriend00 Mar 03 '21 at 04:03