如何修改指定Node.js代码以判断IP是否存在于请求返回内容中
没问题,我帮你修改了代码,同时优化了异步处理和错误逻辑,让它能正确返回IP是否存在的布尔值:
修改后的代码(基于request库)
首先是适配你需求的完整代码:
const request = require('request'); function getBlocklist(ipAddress) { const baseurl = "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/bi_sip_0_1d.ipset"; // 用Promise封装异步操作,这样才能获取到异步执行的结果 return new Promise((resolve, reject) => { request(baseurl, function (error, response, body) { // 处理请求错误 if (error) { console.error('请求列表时出错:', error); reject(error); return; } // 检查响应状态码 if (response.statusCode !== 200) { console.error('获取列表失败,状态码:', response.statusCode); reject(new Error(`请求失败,状态码: ${response.statusCode}`)); return; } // 核心逻辑:判断IP是否存在于返回内容中 const ipExists = body.includes(ipAddress); console.log(`IP ${ipAddress} 在黑名单中吗?${ipExists ? '是' : '否'}`); resolve(ipExists); }); }); } // 调用示例:替换成你要检查的IP const targetIp = "192.168.1.1"; getBlocklist(targetIp) .then(isInList => { console.log('最终结果:', isInList); // 这里会得到true或false // 你可以在这里根据结果做后续操作 }) .catch(err => { console.error('处理过程出错:', err); });
关键改动说明
- 异步处理优化:原代码用回调函数无法直接返回结果,我用Promise封装了整个请求逻辑,调用方可以通过
.then()或async/await获取最终的布尔值。 - 添加IP参数:把要检查的IP作为参数传入,让函数更灵活——你可以随时检查不同的IP,若需要固定IP,直接把参数换成内部定义的
const ip_address = "你的IP"即可。 - 完善错误处理:原代码只处理了成功的情况,现在会捕获请求失败、非200状态码的情况,方便排查问题。
- 核心判断逻辑:用
body.includes(ipAddress)检查返回的文本内容中是否包含目标IP,这是最直接的字符串匹配方式。
更现代的替代方案(用node-fetch)
注意request库已经被官方废弃了,如果是新项目,推荐使用更现代的node-fetch,代码更简洁:
const fetch = require('node-fetch'); async function getBlocklist(ipAddress) { const baseurl = "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/bi_sip_0_1d.ipset"; try { const response = await fetch(baseurl); if (!response.ok) { throw new Error(`请求失败,状态码: ${response.status}`); } const body = await response.text(); const ipExists = body.includes(ipAddress); console.log(`IP ${ipAddress} 在黑名单中吗?${ipExists ? '是' : '否'}`); return ipExists; } catch (err) { console.error('处理出错:', err); throw err; // 或者根据需求返回false } } // 调用示例(用async/await) async function checkIp() { const result = await getBlocklist("192.168.1.1"); console.log('检查结果:', result); } checkIp();
内容的提问来源于stack exchange,提问作者aphexlog
相关产品推荐
相关产品推荐

