提问者:小点点

超文本传输协议在Node.js和Python Flask服务器之间发布了一个bas64 json请求,但是Node收到了一个不完整的json


我尝试发送base64 json表单节点。将js服务器返回到python flask服务器,然后将相同的base64代码返回到节点。js服务器。Flask可以成功接收我的json,但当它响应到节点时,节点尝试打印响应。我收到一条错误消息:“JSON输入意外结束”。我发现原因是节点服务器无法完全接收base64。它只收到一小部分。有什么问题?post请求是否有字符串限制?

我在将base64代码更改为短字符串时进行了测试。节点服务器可以正常接收响应。

有人能帮我吗?非常感谢。

这是我的代码:

var express = require('express');
var http = require('http');

var app = express();

app.get('/', (req, res) => res.send('Hello World!'));

app.listen(10000, () => console.log('Running on http://localhost:10000'));

postData = JSON.stringify({
    'code': <base64 code or short string here>
});

var options = {
    hostname: 'localhost',
    port: 10001,
    path: '/test',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData)
    }
};

var req = http.request(options, (res) => {
    res.on('data', (chunk) => {
        var data = JSON.parse(chunk);
        console.log(data.message);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
});

req.on('error', (e) => {
    console.error(`problem with request: ${e.message}`);
});

req.write(postData);
req.end();
from flask import Flask
from flask import request
from flask import jsonify

app = Flask(__name__)

@app.route('/test', methods=['POST'])
def test():
    request_data = request.get_json()
    print(request_data['code'])
    return jsonify(
        message = request_data['code']
    )

app.run(host='localhost', port=10001)

共1个答案

匿名用户

在NodeJS代码中,在数据事件中,您将获得块数据(部分数据),您需要等待结束事件,然后进行解析,下面的示例可能会对您有所帮助

var req = http.request(options, (res) => {
    var data = '';
    res.on('data', (chunk) => {
        data += chunk.toString(); // buffer to string
    });
    res.on('end', () => {
        data = JSON.parse(data);
        console.log(data.message);
        console.log('No more data in response.');
    });
});