You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:20:28