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

Electron内嵌Python Flask服务器无法访问,出现net::ERR_CONNECTION_REFUSED错误

Electron中启动Flask服务器出现连接拒绝问题排查

执行npm run start可正常启动Electron应用,但访问Flask路由时显示错误:(failed) net::ERR_CONNECTION_REFUSED,怀疑Flask服务器未正常启动,以下是排查和解决方法:

文件夹结构

  • 项目根目录:包含flask_server文件夹、index.html、main.js、package.json、preload.js、renderer.js
  • flask_server文件夹:内部存放Flask入口文件main.py

现有代码

Electron主进程文件 main.js

const { app, BrowserWindow } = require('electron');
const path = require('path');
const { spawn } = require('child_process')

const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
        },
    });

    win.loadFile('index.html');
};

app.whenReady().then(() => {
    spawn("python", ["./flask_server/main.py"])
    createWindow();

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
        }
    });
});

app.on('window-all-closedUse', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

Electron页面文件 index.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
    <title>My Test App</title>
</head>

<body>
    <h1>Hello from Electron renderer!</h1>
    <p>👋</p>
    <p id="info"></p>

    <br><a href="http://127.0.0.1:5000/">Go</a>
</body>
<script src="./renderer.js"></script>

</html>

Flask服务器文件 flask_server/main.py

import sys
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route("/")
def hello():
    return "Hello World from Flask!"

if __name__ == "__main__":
    app.run(host='127.0.0.1', port=5000)

问题原因及解决方法

1. Python命令兼容性问题

不同系统中Python的命令可能是python或python3,直接用"python"可能导致找不到解释器,服务器启动失败。

2. 相对路径错误

spawn的工作目录可能不是项目根目录,用相对路径./flask_server/main.py可能找不到文件,应该使用绝对路径。

3. 未捕获子进程启动错误

没有监听子进程的标准输出和错误输出,无法排查启动失败的具体原因。

4. Electron事件名称错误

app.on('window-all-closedUse'存在拼写错误,应为window-all-closed,会导致窗口关闭逻辑异常。


修改后的main.js代码

const { app, BrowserWindow } = require('electron');
const path = require('path');
const { spawn } = require('child_process')

const createWindow = () => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
        },
    });

    win.loadFile('index.html');
};

app.whenReady().then(() => {
    // 兼容python/python3命令
    const pythonCmd = process.platform === 'win32' ? 'python' : 'python3';
    // 使用绝对路径指向main.py
    const flaskPath = path.join(__dirname, 'flask_server', 'main.py');
    
    const flaskProcess = spawn(pythonCmd, [flaskPath]);

    // 监听子进程输出,排查问题
    flaskProcess.stdout.on('data', (data) => {
        console.log(`Flask输出: ${data}`);
    });

    flaskProcess.stderr.on('data', (data) => {
        console.error(`Flask错误: ${data}`);
    });

    flaskProcess.on('close', (code) => {
        console.log(`Flask进程退出,码值: ${code}`);
    });

    createWindow();

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
        }
    });
});

// 修复事件名称拼写错误
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

额外检查项

  • 确认已安装Flask依赖:在flask_server目录下执行pip install flask flask-cors
  • 手动运行python flask_server/main.py,确认Flask能正常启动,访问http://127.0.0.1:5000能看到返回内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:50:34