【问题标题】:Python Flask Node.js failed to load resources 404Python Flask Node.js 加载资源失败 404
【发布时间】:2019-02-26 04:06:57
【问题描述】:

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

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);

但是,如果我现在尝试使用 http://localhost:3000/postdatatoFlask我收到404错误

PS C:\Users\danie\Desktop\nodepythonproject> 节点 nodepython { StatusCodeError: 404 - "\n\n\n\n错误\n\n\n

无法 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 (内部/进程/next_tick.js:138:11) 在 process._tickCallback (internal/process/next_tick.js:180:9) 名称:“状态码错误”, 状态码:404, 消息:'404 - "\n\n\n\n错误\n\n\n
无法 POST /postdata
\n\n\n"', 错误:'\n\n\n\n错误\n\n\n
无法 POST /postdata
\n\n\n', 选项: {方法:'POST', uri: 'http://localhost:3000/postdata', 正文:{ data1:'foo',data2:'bar'}, json:是的, 回调:[功能:RP$回调], 变换:未定义, 简单:真的, 解决完全响应:假, transform2xxOnly: 假 }, 回复: 传入消息 { _可读状态: 可读状态 { 对象模式:假, 高水位:16384, 缓冲区:[对象], 长度:0, 管道:空, 管道数:0, 流动的:真实的, 结束:真的, endEmitted:真, 阅读:错误, 同步:真, 需要可读:假, 发射可读:假, 可读听力:假, 恢复计划:假, 毁坏:假, 默认编码:'utf8', 等待排水:0, 阅读更多:错误, 解码器:空, 编码:空}, 可读:假, 域:空, _事件: {结束:[数组], 关闭:[数组], 数据:[功能], 错误:[功能]}, _eventsCount:4, _maxListeners:未定义, 插座: 插座 { 连接:假, _hadError:假, _句柄:空, _父:空, _host: '本地主机', _可读状态:[对象], 可读:假, 域:空, _events:[对象], _eventsCount:8, _maxListeners:未定义, _writableState:[对象], 可写:假, allowHalfOpen:假, _bytesDispatched: 175, _sockname:空, _pendingData:空, _pendingEncoding: '', 服务器:空, _server:空, 解析器:空, _httpMessage:[对象], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392 }, 联系: 插座 { 连接:假, _hadError:假, _句柄:空, _父:空, _host: '本地主机', _可读状态:[对象], 可读:假, 域:空, _events:[对象], _eventsCount:8, _maxListeners:未定义, _writableState:[对象], 可写:假, allowHalfOpen:假, _bytesDispatched: 175, _sockname:空, _pendingData:空, _pendingEncoding: '', 服务器:空, _server:空, 解析器:空, _httpMessage:[对象], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392 }, httpVersionMajor: 1, httpVersionMinor:1, http版本:'1.1', 完整:真实, 标题: { 'x-powered-by': '快递', 'content-security-policy': 'default-src \'self\'', 'x-content-type-options': 'nosniff', '内容类型': '文本/html;字符集=utf-8', '内容长度':'148', 日期:'格林威治标准时间 2018 年 9 月 21 日星期五 17:36:52', 连接:'关闭'}, 原始标题: ['X-Powered-By', '表示', '内容安全策略', 'default-src \'self\'', 'X-Content-Type-Options', 'nosniff', '内容类型', '文本/html;字符集=utf-8', '内容长度', '148', '日期', '格林威治标准时间 2018 年 9 月 21 日星期五 17:36:52', '联系', '关闭' ], 预告片:{}, rawTrailers: [], 升级:假, 网址:'', 方法:空, 状态码:404, statusMessage: '未找到', 客户: 插座 { 连接:假, _hadError:假, _句柄:空, _父:空, _host: '本地主机', _可读状态:[对象], 可读:假, 域:空, _events:[对象], _eventsCount:8, _maxListeners:未定义, _writableState:[对象], 可写:假, allowHalfOpen:假, _bytesDispatched: 175, _sockname:空, _pendingData:空, _pendingEncoding: '', 服务器:空, _server:空, 解析器:空, _httpMessage:[对象], _idleNext:空, _idlePrev:空, _idleTimeout:-1, [符号(asyncId)]:22, [符号(字节读取)]:392 }, _消费:真的, _转储:假, 要求: 客户请求 { 域:空, _events:[对象], _eventsCount:5, _maxListeners:未定义, 输出: [], 输出编码:[], 输出回调:[], 输出大小:0, 可写:真, _last:是的, 升级:假, 分块编码:假, 应该保持活动:假, useChunkedEncodingByDefault: true, 发送日期:假, _removedConnection:假, _removedContLen:假, _removedTE:假, _contentLength:空, _hasBody:是的, _预告片: '', 完成:真的, _headerSent:真, 套接字:[对象], 连接:[对象], _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], 代理:[对象], 套接字路径:未定义, 超时:未定义, 方法:'POST', 路径:'/postdata', _结束:真的, 资源:[循环], 中止:未定义, timeoutCb:空, 升级或连接:假, 解析器:空, maxHeadersCount:空, [符号(outHeadersKey)]:[对象]}, 要求: 要求 { 域:空, _events:[对象], _eventsCount:5, _maxListeners:未定义, 方法:'POST', uri:[对象], 正文:'{"data1":"foo","data2":"bar"}', 可读:真实, 可写:真, 显式方法:真, _qs:[对象], _auth:[对象], _oauth:[对象], _multipart:[对象], _redirect:[对象], _tunnel:[对象], _rp_resolve:[功能], _rp_reject:[功能], _rp_promise:[对象], _rp_callbackOrig:未定义, 回调:[功能], _rp_options:[对象], 标题:[对象], setHeader: [功能], hasHeader: [功能], getHeader: [功能], removeHeader: [功能], 本地地址:未定义, 水池: {}, 目的地:[], __isRequestRequest:真, _callback:[功能:RP$回调], 代理:空, 隧道:假, 设置主机:真, originalCookieHeader: 未定义, _disableCookies:真, _jar:未定义, 端口:'3000', 主机:'本地主机', 路径:'/postdata', _json:是的, httpModule:[对象], 代理类:[对象], 代理:[对象], _开始:是的, href: 'http://localhost:3000/postdata', 请求:[对象], 提示:是的, 回应:[通函], originalHost: 'localhost:3000', originalHostHeaderName: '主机', 响应内容:[循环], _destdata:真, _结束:真的, _callbackCalled: true }, toJSON:[函数:responseToJSON], 无壳:无壳{字典:[对象]}, 阅读:[功能], 正文:'\n\n\n\n错误\n\n\n
无法 POST /postdata
\n\n\n' } }

【问题讨论】:

  • 如果您导航到 '/' 端点,它是否会按预期返回“Flask server”?

标签: python node.js flask http-status-code-404


【解决方案1】:

您的 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
};

【讨论】:

  • 非常感谢您的帮助。这确实是问题所在。
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 2012-07-24
相关资源
最近更新 更多