NodeJS 如何在ExpressJS服务器中检查请求路径是否不存在(404)?

hc8w905p  于 2023-04-05  发布在  Node.js
关注(0)|答案(1)|浏览(186)

我们收到来自随机机器人的请求,这些机器人不时地在互联网上爬行,用随机路径发送垃圾邮件请求,我们希望过滤掉服务器上记录的404请求。问题是,当参数指向不存在的资源时,即使路径存在,我们的一些请求处理程序也会故意将响应的状态代码设置为404。如果请求的路径在我们的中间件中不存在,我们就不可能使用状态码作为指示器。有没有一种方法可以在不依赖于响应的状态码的情况下检查请求的路径是否确实不存在?

app.use(
  morgan('combine', {
    skip(req, res) {
      if (res.statusCode == 404) return true; // any alternatives to this?
      if (res.statusCode < 400) return true;
      return false;
    }
  })
)
uxh89sit

uxh89sit1#

另一种不依赖响应状态码过滤404请求的方法是使用一个单独的中间件来检查请求的路径是否存在于应用程序中。

app.use((req, res, next) => {
// match the path to your router
  const pathMatch = app._router.stack.find(layer => layer.regexp.test(req.path));
  if (pathMatch) {
    // If the requested path exists, continue with the request handling
    next();
  } else {
    // If the requested path does not exists
  }
});

相关问题