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

如何在Node.js Express API中集成Python代码实现业务逻辑

实现方案

两种主流落地方式,按需选择即可:

  • 子进程调用 (适合轻量、低频调用的场景)
    直接在Express路由逻辑中使用Node.js内置的child_process模块调用Python脚本,参数可以通过命令行传递,Python处理完成后将结果序列化为JSON输出到标准输出,Express接收后返回给请求方。
    示例代码片段:
    Node.js路由侧:
const { spawn } = require('child_process');
app.get('/api/v1/category/json-data', (req, res) => {
  const quantity = req.query.quantity;
  // 调用Python脚本,传入参数
  const pyProcess = spawn('python3', ['src/python/scripts/handle_data.py', quantity]);
  
  let result = '';
  pyProcess.stdout.on('data', (data) => {
    result += data.toString();
  });
  
  pyProcess.stderr.on('data', (err) => {
    console.error('Python脚本执行错误:', err.toString());
    return res.status(500).json({ error: '内部处理错误' });
  });
  
  pyProcess.on('close', (code) => {
    if (code === 0) {
      try {
        const jsonResult = JSON.parse(result);
        return res.json(jsonResult);
      } catch (e) {
        return res.status(500).json({ error: '结果解析错误' });
      }
    }
    return res.status(500).json({ error: '处理失败' });
  })
})

Python脚本侧(handle_data.py):

import sys
import json
import requests # 你需要用到的Python库

def process_data(quantity):
    # 你的业务逻辑
    return {"data": [xxx for _ in range(int(quantity))]}

if __name__ == "__main__":
    quantity = sys.argv[1]
    res = process_data(quantity)
    print(json.dumps(res), flush=True) # 加flush避免输出缓存
  • 内部服务调用 (适合逻辑复杂、调用频率高的场景)
    把Python逻辑单独封装成一个内部API服务,用Flask或FastAPI实现,只监听本地端口不对外暴露,Express收到用户请求后,通过HTTP请求调用内部Python服务获取结果,再返回给用户。这种方式避免了每次调用都启动Python进程的开销,性能更高,也方便后续迭代扩容。

项目目录结构设计

推荐结构如下:

your-project/
├── .gitignore # 配置忽略node_modules、venv、临时文件、日志等
├── package.json # npm配置、依赖、脚本
├── package-lock.json
├── venv/ # Python虚拟环境,独立隔离依赖
├── src/
│   ├── express/ # Express服务相关代码
│   │   ├── app.js # Express实例初始化、中间件配置
│   │   ├── server.js # 服务启动入口
│   │   └── routes/ # 路由模块
│   │       └── category.js # 对应你的业务路由逻辑
│   └── python/ # Python业务逻辑相关代码
│       ├── requirements.txt # Python依赖声明
│       ├── utils/ # Python通用工具函数
│       ├── scripts/ # 子进程调用场景下的执行脚本
│       └── server.py # 内部服务场景下的Python服务启动入口

多语言依赖管理

  • Python侧:使用虚拟环境隔离依赖,所有用到的Python库都统一写到requirements.txt里,开发和部署时先创建虚拟环境,再执行pip install -r src/python/requirements.txt安装所有Python依赖。
  • Node.js侧:正常用package.json管理npm依赖即可。
  • 可以在package.json的scripts中配置统一安装命令,示例如下:
    "scripts": {
      "install:all": "npm install && python3 -m venv venv && source venv/bin/activate && pip install -r src/python/requirements.txt",
      "start": "node src/express/server.js"
    }
    
    Windows环境下把虚拟环境激活命令替换为对应平台的指令即可。

参考资源

你可以直接搜索Node.js child_process模块官方文档、Express多语言集成相关的技术博客、Flask/FastAPI轻量服务开发教程,技术社区有很多成熟的项目落地案例可以参考。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:24:03