StackBlitz连接本地机器出现ECONNREFUSED错误求助
本地Express服务器无法被StackBlitz云端容器访问的解决办法
问题详情
本地运行的Express服务器,从StackBlitz Web容器访问时出现连接拒绝错误:
FetchError: request to https://192.168.1.23:8443/ failed, reason: connect ECONNREFUSED 192.168.1.23:8443
已尝试操作:
- 启用HTTPS
- 开启CORS
- 将服务器监听地址设为
0.0.0.0
本地服务器代码
var fs = require('fs'); var http = require('http'); var https = require('https'); var cors = require('cors') var privateKey = fs.readFileSync('key.pem', 'utf8'); var certificate = fs.readFileSync('cert.pem', 'utf8'); var credentials = { key: privateKey, cert: certificate }; var express = require('express'); var app = express(); app.use(cors()) app.get('/', (_, res) => res.send(`hello`)); var httpServer = http.createServer(app); var httpsServer = https.createServer(credentials, app); httpServer.listen(8080, '0.0.0.0'); httpsServer.listen(8443, '0.0.0.0');
StackBlitz容器代码
import fetch from 'node-fetch'; const url = 'https://192.168.1.23:8443/'; const response = await fetch(url) .catch((err) => console.error(err)); console.log(response?.status || 'failed');
核心原因
StackBlitz的代码运行在云端容器环境中,不属于你本地的局域网,因此无法直接访问内网IP(192.168.1.23)对应的服务——这类内网地址仅能被同一局域网内的设备访问,云端容器不在这个网络范围内。
解决步骤
使用内网穿透工具暴露公网访问地址
这类工具可以将本地服务器的端口映射到公网,让云端容器能通过公网URL访问。比如:- 用ngrok:运行命令
ngrok https 8443,工具会生成一个公网HTTPS地址(如https://abc123.ngrok.io),将StackBlitz代码中的url替换为这个地址即可。 - 用localtunnel:运行命令
lt --port 8443 --ssl,同样会得到一个公网URL用于替换。
- 用ngrok:运行命令
确认本地防火墙允许端口入站
检查本地操作系统的防火墙设置,确保8443端口的入站连接被允许,避免本地防火墙拦截请求。验证服务器监听状态
用以下命令确认服务器确实在0.0.0.0:8443监听:- Windows:
netstat -an | findstr 8443 - macOS/Linux:
lsof -i :8443
- Windows:
内容的提问来源于stack exchange,提问作者Pete Hayman
相关产品推荐
相关产品推荐

