You need to enable JavaScript to run this app. 如何简便实现Python/Flask应用向Node.js应用传输数据?
优惠活动
大模型
产品
解决方案
定价
更多

如何简便实现Python/Flask应用向Node.js应用传输数据?

最简便的服务端直连通信方案

完全不需要引入数据库、消息队列这类额外中间件,直接走本地HTTP POST直连就能实现需求,整个过程零额外网络开销,开发和调试成本最低,完全适配你纯服务端交互的场景。


具体改动步骤

1. 给Node侧新增数据接收接口

你原有的Node代码有个语法硬伤:require('telnyx')后的初始化语句被换行截断,根本跑不起来。改动时先装个最轻量的Web框架express,功能完全够用来开个本地接收接口:

npm install express

修改后的Node侧完整代码:

const express = require('express');
// 修正原代码的截断问题,正确初始化Telnyx客户端
const telnyx = require('telnyx')('KEY0178B7161E6B3873C151BDC3597EE42B_SHXIHH1anGGOgfhcIb3kjQ');
const app = express();
// 内置JSON解析,自动处理POST请求传过来的参数
app.use(express.json());

// 新增专门接Python传过来数据的接口
app.post('/receive-sms-data', async (req, res) => {
  // 直接拿Python传过来的两个目标变量
  const senderNumber = req.body.sender_number;
  const smsContent = req.body.sms_content;

  // 后面的Telnyx逻辑、格式处理你自己填就行
  try {
    const sendRes = await telnyx.messages.create({
      'from': '+12182101811', // 你的Telnyx绑定号码
      'to': senderNumber,
      'text': smsContent
    });
    console.log('Telnyx消息发出去了', sendRes.data);
    res.sendStatus(200);
  } catch (err) {
    console.error('Telnyx消息发失败了', err);
    res.sendStatus(500);
  }
});

// 启动Node服务,监听3000端口,同主机跑的话根本不用开放公网端口
app.listen(3000, () => {
  console.log('Node接收服务起来了,本地端口3000');
});

2. 修改Python侧Flask代码,收到短信就推数据给Node

先装个Python的轻量请求库requests:

pip install requests

修改后的Flask侧完整代码:

import os
import requests
from flask import Flask, request

app = Flask(__name__)
# 同主机部署直接用回环地址,数据不经过公网,没安全问题
NODE_SERVICE_URL = "http://localhost:3000/receive-sms-data"

@app.route('/webhooks', methods=['POST'])
def webhooks():
   body = request.json
   messageSenderNumber = body['data']['payload']['from']['phone_number']
   messageSenderMessage = body['data']['payload']['text']
   newMessageSenderMessage = messageSenderMessage.lower()
   print(f"You have a new message from {messageSenderNumber}: {newMessageSenderMessage}")

   # 新增:把两个变量直接POST给Node服务
   requests.post(
       NODE_SERVICE_URL,
       json={
           "sender_number": messageSenderNumber,
           "sms_content": newMessageSenderMessage
       },
       timeout=2 # 本地请求设2秒超时,别卡着Flask给Telnyx回200的流程
   )
   return '', 200

if __name__ == "__main__":
   app.run(port=5000)

为什么选这个方案

  • 没有多余环节:你就传两个字符串,搞消息队列、共享文件、跨服务数据库全是过度设计,反而增加一堆排错成本
  • 链路最短:两个服务同机跑的话,数据全走系统回环网卡,不经过公网,不会有丢包、延迟高的问题,哪怕每秒几十条短信的量也完全扛得住
  • 调试方便:想测通不通,直接用curl给Node的3000端口发个测试POST就行,10秒就能验证链路是不是通的
  • 后续好扩展:哪天两个服务拆到不同服务器了,只要把NODE_SERVICE_URL换成Node服务的内网IP就行,业务代码一个字都不用改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 12:54:04