无法通过Node.js获取Python脚本输出的技术求助
解决Node.js中间层调用Python接口返回结果异常的问题
我看了你的代码,问题主要出在请求参数传递和响应数据处理这两个核心点上,咱们一步步来修复:
1. 错误传递了整个Request对象给Python接口
你在app.js里调用usecaseWorkflow.fetchUsecaseWorkflow(req)时,把整个Express的req对象传了过去,但Python接口需要的是请求体里的业务数据(也就是req.body),不是包含一堆框架属性的Request对象。这会导致Python接口收到的参数完全不符合预期,自然返回不了正确结果。
修改app.js里的调用代码:
router.post('/usecase-workflow', async (req, res) => { try{ // 传递req.body而非整个req对象 let responseUsecase = await usecaseWorkflow.fetchUsecaseWorkflow(req.body); res.send(responseUsecase); }catch(error) { responseObj = { status: 'error', msg: 'Error occurred while downloading ubot file', body: error.message || error } res.send(responseObj); } })
2. 返回了Axios的完整响应对象而非实际数据
Axios的响应结果response包含了很多元数据(比如状态码、响应头、配置信息等),而你直接把整个response返回给前端了,这和你直接调用Python接口得到的纯业务数据不一样。你需要提取response.data才是Python接口返回的实际内容。
同时要完善错误处理:在fetchUsecaseWorkflow的catch块里,要把错误抛出去,让上层的try/catch能捕获并返回错误响应,不然接口会返回undefined。
修改usecaseWorkflow.js的代码:
const mongoose = require('mongoose'); const axios = require('axios'); const request = require('request'); class DefineUseCase { fetchUsecaseWorkflow = async(requestBody) => { try{ // 明确指定Content-Type,确保请求格式和Postman调用一致 const response = await axios.post('http://127.0.0.1:5005/usecase-workflow', requestBody, { headers: { 'Content-Type': 'application/json' } }); // 只返回Python接口的实际响应数据 return response.data; }catch(error) { console.log(error); // 抛出错误,让上层处理 throw error; } } } module.exports = new DefineUseCase();
额外验证点
如果还是有问题,可以检查:
- 确认Node.js服务已经正确配置了
express.json()中间件,这样req.body才能被正确解析为JSON对象 - 对比Postman调用Python接口时的请求头,确保axios发送的请求头和它一致(比如Content-Type、其他自定义头)
这样修改后,你的Node.js接口应该就能返回和直接调用Python接口完全一致的结果了。
内容的提问来源于stack exchange,提问作者subhra_edqart
相关产品推荐
相关产品推荐

