如何简便实现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
相关产品推荐
相关产品推荐

