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

NodeMCU发送GET请求无返回,Node.js服务器在其他客户端正常

NodeMCU请求Codespaces Node.js服务器无响应的排查方案

针对你遇到的Edge/Postman访问正常,但NodeMCU发送GET请求无返回的问题,从以下几个方向排查解决:

1. 确认Codespaces服务器的公网可访问性

Codespaces的服务不是通过本地IP访问,而是有专属的公网转发地址:

  • 打开Codespaces的「Ports」面板(终端侧边),找到8080端口,将「Visibility」设置为「Public」;
  • 复制面板里的「Forwarded Address」(类似https://xxxx-xxxx-xxxx.github.dev:8080),用手机浏览器(和NodeMCU连同一WiFi)访问,确认能返回{"method": "get"},这一步能排除服务器本身的访问限制问题。

2. 修正NodeMCU的HTTP请求参数

NodeMCU的http.get要求第一个参数是完整的URL,不能仅填写IP或域名:

-- 替换为你的Codespaces公网转发地址
local server_url = "http://<你的Codespaces公网地址>:8080/"

http.get(server_url, nil, function(code, data)
    if (code < 0) then
        print("请求失败,错误码: " .. code)
    else
        print("状态码: " .. code)
        print("响应内容: " .. data)
    end
end)

注意:如果Codespaces使用HTTPS,需确认NodeMCU模块支持SSL;若不支持,可检查Codespaces端口转发是否允许HTTP访问。

3. 补全Node.js服务器的响应头

原服务器代码未设置响应状态码和Content-Type,浏览器可兼容但嵌入式设备的HTTP客户端可能无法识别。修改服务器代码:

const http = require("http");

const server = http.createServer((req, res) => {
    // 添加必要的响应头
    res.setHeader('Content-Type', 'application/json');
    res.setHeader('Access-Control-Allow-Origin', '*'); // 允许跨域调试

    if (req.method === 'GET') {
        res.writeHead(200); // 明确返回200状态码
        res.end(JSON.stringify({"method": "get"}));
    } else if (req.method === 'POST') {
        res.writeHead(200);
        res.end(JSON.stringify({"method": "post"}));
    } else {
        res.writeHead(405);
        res.end(JSON.stringify({"error": "不支持的请求方法"}));
    }
}).listen(8080);

用JSON.stringify代替手动编写JSON字符串,可避免转义错误。

4. 确保NodeMCU的WiFi连接正常

在发送HTTP请求前,先确认NodeMCU已成功连接WiFi并获取IP:

wifi.setmode(wifi.STATION)
wifi.sta.config("你的WiFi名称", "你的WiFi密码")
wifi.sta.connect()

-- 定时检查WiFi连接状态
tmr.alarm(1, 1000, 1, function()
    local ip = wifi.sta.getip()
    if not ip then
        print("正在连接WiFi...")
    else
        tmr.stop(1)
        print("WiFi已连接,IP: " .. ip)
        -- 在此处发送HTTP请求
        http.get(server_url, nil, function(code, data)
            -- 回调逻辑同上
        end)
    end
end)

若WiFi连接失败,HTTP请求自然无法发送。

5. 检查Codespaces端口的防火墙设置

确认Codespaces的8080端口未被防火墙拦截,在Ports面板中确保「Public」状态已开启,且转发地址能正常访问。


内容的提问来源于stack exchange,提问作者PlanC14

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:40:43