Node.js接收指定IP的GET请求获取JSON文件时出现404错误
解决Node.js服务/test路径404错误及指定IP访问限制问题
问题原因分析
你的代码返回404主要有两个核心问题:
- 路径处理逻辑错误:访问
/test时,request.url.substr(1)得到的是test,但你实际要读取的是JSON文件(比如test.json),代码会尝试读取名为test的文件,若该文件不存在则触发404。 - 缺少指定IP验证逻辑:代码没有对请求发起IP做限制,不符合你“仅接收指定IP请求”的需求。
修正方案及代码
下面是修正后的代码,同时满足路径匹配和指定IP访问限制:
const http = require('http'); const fs = require('fs'); // 允许访问的指定IP列表,替换为你需要的IP const allowedIPs = ['127.0.0.1', 'xxx.xxx.xxx.xxx']; http.createServer((request, response) => { const clientIP = request.socket.remoteAddress; console.log(`客户端IP: ${clientIP}`); console.log(`请求路径: ${request.url}`); console.log(`请求方法: ${request.method}`); // 验证客户端IP是否在允许范围内 if (!allowedIPs.includes(clientIP)) { response.statusCode = 403; response.end("禁止访问:IP不在允许列表内"); return; } if (request.method === "GET") { // 精准匹配/test路径,指定对应的JSON文件 let filePath; if (request.url === '/test') { filePath = 'test.json'; // 替换为你的JSON文件实际路径 } else { response.statusCode = 404; response.end("资源不存在"); return; } // 检查文件是否可读 fs.access(filePath, fs.constants.R_OK, err => { if (err) { response.statusCode = 404; response.end("资源未找到!"); } else { response.setHeader('Content-Type', 'application/json'); fs.createReadStream(filePath).pipe(response); } }); } else { response.statusCode = 405; response.end("不支持的请求方法"); } }).listen(3000, function() { console.log("服务器已启动在3000端口"); });
关键修改说明
- IP限制:新增
allowedIPs数组存储允许的IP,请求到来时先验证客户端IP,不符合则返回403。 - 路径匹配:明确判断
request.url === '/test',并指定对应的JSON文件路径,避免直接截取路径导致的文件名称错误。 - 响应优化:添加了非GET请求的405响应,同时为JSON文件设置正确的
Content-Type响应头。 - 错误处理:对非/test路径直接返回404,避免无效的文件检查。
内容的提问来源于stack exchange,提问作者alexeyjks
相关产品推荐
相关产品推荐

