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\nCannot POST /postdata
\n\n\n”',
错误:'\n\n\n\nError\n\n\nCannot 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\nCannot 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
};
您好,我正在尝试将数据从节点发送到 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
};