Python Flask Node.js 加载资源失败 404

Python Flask Node.js failed to load resources 404

您好,我正在尝试将数据从节点发送到 python。我读到这可以通过 2 个带有 express 和 Flask 的服务器实现。然而,当我 运行 代码时,我收到一个错误(见下文)

Python 脚本

from flask import Flask, request
import json

app = Flask(__name__)

@app.route('/')
def index():
    return "Flask server"

@app.route('/postdata', methods = ['POST'])
def postdata():
    data = request.get_json()
    print(data)
    # do something with this data variable that contains the data from the node server
    return json.dumps({"newdata":"hereisthenewdatayouwanttosend"})

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

节点脚本

var express = require('express');
var bodyParser = require('body-parser');
var request = require('request-promise');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/postdatatoFlask', async function (req, res) {
    var data = { 
        data1: "foo",
        data2: "bar"
    }

    var options = {
        method: 'POST',
        uri: 'http://localhost:3000/postdata',
        body: data,
        json: true // Automatically stringifies the body to JSON
    };

    var returndata;
    var sendrequest = await request(options)
    .then(function (parsedBody) {
        console.log(parsedBody); 
        returndata = parsedBody; 
    })
    .catch(function (err) {
        console.log(err);
    });

    res.send(returndata);
});

app.listen(3000);

但是,如果我现在尝试执行 post 请求 http://localhost:3000/postdatatoFlask 我收到 404 错误

PS C:\Users\danie\Desktop\nodepythonproject>节点节点python { StatusCodeError: 404 - “\n\n\n\nError\n\n\n

Cannot POST /postdata
\n\n\n” 在新的 StatusCodeError (C:\Users\danie\node_modules\request-promise-core\lib\errors.js:32:15) 在 Request.plumbing.callback(C:\Users\danie\node_modules\request-promise-core\lib\plumbing.js:104:33) 在 Request.RP$callback [as _callback] (C:\Users\danie\node_modules\request-promise-core\lib\plumbing.js:46:31) 在 Request.self.callback(C:\Users\danie\node_modules\request\request.js:185:22) 在 emitTwo (events.js:126:13) 在 Request.emit (events.js:214:7) 在请求。 (C:\Users\danie\node_modules\request\request.js:1157:10) 在 emitOne (events.js:116:13) 在 Request.emit (events.js:211:7) 在传入消息。 (C:\Users\danie\node_modules\request\request.js:1079:12) 在 Object.onceWrapper (events.js:313:30) 在 emitNone (events.js:111:20) 在 IncomingMessage.emit (events.js:208:7) 在 endReadableNT (_stream_readable.js:1064:12) 在 _combinedTickCallback (internal/process/next_tick.js:138:11) 在 process._tickCallback (internal/process/next_tick.js:180:9) 姓名:'StatusCodeError', 状态码:404, 消息:'404 - “\n\n\n\nError\n\n\n
Cannot POST /postdata
\n\n\n”', 错误:'\n\n\n\nError\n\n\n
Cannot POST /postdata
\n\n\n', 选项: { 方法:'POST', uri: 'http://localhost:3000/postdata', body: { 数据 1: 'foo', 数据 2: 'bar' }, json: 是的, 回调:[功能:RP$回调], 变换:未定义, 简单:真实, resolveWithFullResponse:假, transform2xxOnly: false }, 回复: 传入消息 { _readable状态: 可读状态{ 对象模式:假, 高水位:16384, 缓冲区:[Object], 长度:0, 管道:空, 管道数:0, 流动:真实, 结束:真实, endEmitted:真, 阅读:假的, 同步:真, 需要可读:假, 发射可读:假, 可读监听:假, 恢复计划:假, 销毁:假的, 默认编码:'utf8', 等待流失:0, 阅读更多:错误, 解码器:空, 编码:空}, 可读:错误, 域:空, _事件: { 结束:[数组], 关闭:[数组], 数据:[功能], 错误:[功能]}, _eventsCount:4, _maxListeners:未定义, 插座: 插座 { 连接:假, _hadError:错误, _句柄:空, _parent:空, _host: 'localhost', _readableState: [Object], 可读:错误, 域:空, _事件:[Object], _eventsCount:8, _maxListeners:未定义, _writableState: [Object], 可写:假, allowHalfOpen:假, _bytesDispatched:175, _sockname:空, _pendingData:空, _pendingEncoding: '', 服务器:空, _服务器:空, 解析器:空, _httpMessage: [Object], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392}, 联系: 插座 { 连接:假, _hadError:错误, _句柄:空, _parent:空, _host: 'localhost', _readableState: [Object], 可读:错误, 域:空, _事件:[Object], _eventsCount:8, _maxListeners:未定义, _writableState: [Object], 可写:假, allowHalfOpen:假, _bytesDispatched:175, _sockname:空, _pendingData:空, _pendingEncoding: '', 服务器:空, _服务器:空, 解析器:空, _httpMessage: [Object], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392}, http版本主要:1, http版本次要:1, http版本:'1.1', 完整:真实, headers: { 'x-powered-by': 'Express', 'content-security-policy': 'default-src \'self\'', 'x-content-type-options': 'nosniff', 'content-type': 'text/html; charset=utf-8', 'content-length': '148', 日期:'Fri, 21 Sep 2018 17:36:52 GMT', 连接:'close' }, 原始标头: [ 'X-Powered-By', 'Express', 'Content-Security-Policy', 'default-src\'self\'', 'X-Content-Type-Options', 'nosniff', 'Content-Type', 'text/html; charset=utf-8', 'Content-Length', '148', 'Date', 'Fri, 21 Sep 2018 17:36:52 GMT', 'Connection', 'close' ], 预告片:{}, 原始预告片:[], 升级:假的, url: '', 方法:空, 状态码:404, 状态消息:'Not Found', 客户: 插座 { 连接:假, _hadError:错误, _句柄:空, _parent:空, _host: 'localhost', _readableState: [Object], 可读:错误, 域:空, _事件:[Object], _eventsCount:8, _maxListeners:未定义, _writableState: [Object], 可写:假, allowHalfOpen:假, _bytesDispatched:175, _sockname:空, _pendingData:空, _待定编码:'', 服务器:空, _服务器:空, 解析器:空, _httpMessage: [Object], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392}, _consuming:是的, _dumped:假的, 要求: 客户端请求{ 域:空, _事件:[Object], _eventsCount:5, _maxListeners:未定义, 输出: [], 输出编码:[], 输出回调:[], 输出大小:0, 可写:真, _last:是的, 升级:假, 分块编码:假, 应该保持活着:假的, useChunkedEncodingByDefault: true, 发送日期:假, _removedConnection:假, _removedContLen:错误, _removedTE:错误, _contentLength:空, _hasBody:是的, _预告片: '', 完成:真实, _headerSent:真, 套接字:[Object], 连接:[Object], _header: 'POST /postdata HTTP/1.1\r\nhost: localhost:3000\r\naccept: application/json\r\ncontent-type: application/json\r\ncontent-length: 29\r\nConnection: close\r\n\r\n', _onPendingData:[功能:noopPendingOutput], 代理人:[Object], 套接字路径:未定义, 超时:未定义, 方法:'POST', 路径:'/post数据', _ended:是的, res: [循环], 中止:未定义, timeoutCb:空, 升级或连接:假, 解析器:空, maxHeadersCount:空, [符号(outHeadersKey)]:[Object]}, 要求: 要求 { 域:空, _事件:[Object], _eventsCount:5, _maxListeners:未定义, 方法:'POST', uri: [Object], body: '{"data1":"foo","data2":"bar"}', 可读性:真实, 可写:真, 显式方法:真, _qs: [Object], _auth: [Object], _oauth: [Object], _multipart: [Object], _redirect: [Object], _隧道:[Object], _rp_resolve: [功能], _rp_reject: [函数], _rp_promise: [Object], _rp_callbackOrig:未定义, 回调:[功能], _rp_options: [Object], headers: [Object], setHeader: [功能], hasHeader: [函数], getHeader: [功能], removeHeader: [功能], 本地地址:未定义, 水池: {}, 目的地:[], __isRequestRequest: 是的, _callback: [功能: RP$回调], 代理:空, 隧道:假的, 设置主机:是的, originalCookieHeader:未定义, _disableCookies:是的, _jar:未定义, 端口:'3000', 主持人:'localhost', 路径:'/post数据', _json:是的, http模块:[Object], 代理类:[Object], 代理人:[Object], _started:是的, href: 'http://localhost:3000/postdata', 请求:[Object], ntick:是的, 回应:[通告], 原始主机:'localhost:3000', originalHostHeaderName: 'host', 响应内容:[循环], _destdata:真, _ended:是的, _callbackCalled:真}, toJSON: [函数: responseToJSON], caseless: Caseless { dict: [Object] }, 阅读:[功能], body: '\n\n\n\nError\n\n\n
Cannot POST /postdata
\n\n\n'}}

您的 Flask 服务器正在侦听端口 5000,但您的 postdatatoFlask 方法正在 POST 到端口 3000。

更改此代码:

var options = {
    method: 'POST',
    uri: 'http://localhost:3000/postdata',
    body: data,
    json: true // Automatically stringifies the body to JSON
};

对此:

var options = {
    method: 'POST',
    uri: 'http://localhost:5000/postdata',
    body: data,
    json: true // Automatically stringifies the body to JSON
};