首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs日志中间件只记录一次

Nodejs日志中间件只记录一次
EN

Stack Overflow用户
提问于 2021-09-05 03:49:06
回答 1查看 79关注 0票数 2

我的nodejs express应用程序提供一个需要并加载css文件、js文件等的文件。我有一个日志中间件,它请求客户端的ip并记录所述ip (在检查它与恶意ips的json文件不匹配后)。由于服务器加载的资源,当一个人加载一个页面时,服务器会多次记录该ip。

日志中间件:

代码语言:javascript
运行
复制
function checkIP(req, res, next) {
  const clientIp = req.ip;
  let allowCXN = true;

//read json file
fs.readFile("ip_info.json", "utf8", function (err, data) {
    if (err) {
      console.log(err);
    } else {
      var ip_info = JSON.parse(data);

      for (let i = 0; i <= ip_info.ip_array.length - 1; i++) {
        //console.log(ip_info.ip_array[i].ip);
        if (clientIp == ip_info.ip_array[i].ip) {
          allowCXN = false;
        }
      }

      if (!allowCXN) {
          res.end();
          next();
        }
      } else {
        console.log("Now serving ip:", "\x1b[33m", clientIp, "\x1b[37m");
        next();
      }
    }
  });
}

ip也被记录到一个单独的json文件中,以跟踪谁已经连接,这会一次又一次地用相同的ip填充json数组,而不是只有一次。有没有办法只记录一个连接的ip一次,而不是每次连接到所有其他所需的文件?

请求的JSON文件:

代码语言:javascript
运行
复制
{
  "ip_array": [
    {
      "ip": "::ffff:198.23.172.233",
      "unauth_joins": 0
    },
    {
      "ip": "::ffff:64.62.197.182",
      "unauth_joins": 0
    },
    {
      "ip": "::ffff:23.148.145.235",
      "unauth_joins": 0
    },
    {
      "ip": "::1",
      "unauth_joins": 0
    },
    {
      "ip": "::ffff:127.0.0.1",
      "unauth_joins": 0
    }
  ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-05 17:09:42

你可以这样做:

代码语言:javascript
运行
复制
const ip_info = JSON.parse(data);

   for (let i = 0; i <= ip_info.ip_array.length - 1; i++) {
        //console.log(ip_info.ip_array[i].ip);
        const result = ip_info.ip_array.find(el => el.ip === 'userIPAddress');
        if(result) {
          // it means IP exist don't append in the data
        } else {
          // add to the array
        }
      }

也可能有其他方法,比如在对象中添加IP地址作为关键字,或者您可以从JS本机使用Map DS,这对于搜索是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69060440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档