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

Node.js调用Flask API遇AxiosError: connect ECONNREFUSED问题排查

问题排查与解决方案

一、连接被拒绝(ECONNREFUSED)的原因及修复

1. 端口不匹配(核心问题)

你描述中称Flask应用运行在localhost:5000,但代码存在明显矛盾:

  • Flask代码启动端口为5003:app.run(host='0.0.0.0', port=5003, debug=True)
  • Node.js配置文件config.js中指向的Flask地址是http://localhost:5003/user

修复方式:

  • 确保Flask确实运行在5003端口(启动后检查控制台日志,确认显示Running on http://0.0.0.0:5003);
  • 或修改config.js中的端口为5000,与你实际运行的Flask端口保持一致。

2. 其他排查点

  • 确认Flask服务正常启动:检查Flask启动终端,是否存在数据库连接失败等导致服务未启动的报错;
  • 防火墙/安全软件拦截:本地防火墙或杀毒软件可能阻止了5003(或5000)端口的请求,可临时关闭测试或添加端口允许规则;
  • 路由参数类型不匹配(潜在问题):Flask路由/user/<string:user_id>定义user_id为字符串类型,但User模型中user_id是Integer类型。若请求传入数字ID(如/user/1)会返回404,建议修改路由为/user/<int:user_id>;
  • URL拼接验证:config.js已包含/user路径,Node.js拼接/${userId}后最终URL为http://localhost:5003/user/xxx,与Flask路由匹配,此部分无问题。

二、微服务容器化建议

1. 编写Dockerfile

Flask服务的Dockerfile(Dockerfile.flask)

# 使用Python官方基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露服务端口
EXPOSE 5003

# 启动命令
CMD ["python", "app.py"]

需提前创建requirements.txt,包含flask、flask-sqlalchemy、flask-cors等依赖

Node.js服务的Dockerfile(Dockerfile.node)

# 使用Node.js官方基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制package文件并安装依赖
COPY package*.json .
RUN npm install --production

# 复制应用代码
COPY . .

# 暴露服务端口
EXPOSE 5005

# 启动命令
CMD ["node", "app.js"]

2. 使用Docker Compose编排服务

创建docker-compose.yml,统一管理服务与数据库(以MySQL为例):

version: '3.8'

services:
  flask-api:
    build:
      context: ./flask-service
      dockerfile: Dockerfile.flask
    environment:
      - SQLALCHEMY_DATABASE_URI=mysql+pymysql://root:password@db:3306/user_db
    networks:
      - microservice-net
    depends_on:
      - db

  node-api:
    build:
      context: ./node-service
      dockerfile: Dockerfile.node
    environment:
      - FLASK_MICROSERVICE_URL=http://flask-api:5003/user
    ports:
      - "5005:5005"
    networks:
      - microservice-net
    depends_on:
      - flask-api

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=user_db
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - microservice-net

networks:
  microservice-net:
    driver: bridge

volumes:
  mysql-data:

3. 容器化关键注意事项

  • 服务间通信:容器内的localhost指向自身,Node.js需通过Docker Compose服务名(如flask-api)访问Flask,而非localhost;
  • 环境变量替代硬编码:将数据库URI、服务地址等配置放入环境变量,避免代码硬编码,适配不同部署环境;
  • 启动依赖顺序:通过depends_on确保数据库先启动,再启动Flask,最后启动Node.js;
  • 数据持久化:为数据库配置卷(volumes),防止容器销毁后数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:35:42