JS 请求的主体未出现在 Flask 中

Body of JS Request not Appearing in Flask

我正在尝试从 JS 脚本向 pythonanywhere 上的 Flask 服务器发出 POST 请求,如下所示:

const response = await fetch('http://myusername.pythonanywhere.com/', {
        method: 'POST',
        mode: 'no-cors',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            track: track
        })
    });

其中 track 是一个 nx10 数组。我已经成功地通过 Insomnia 向服务器发出了如下请求:

{
    "track": [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10.234], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
}

并将请求的正文内容打印到日志中,如下所示:

2021-11-16 15:57:14 Test message!
2021-11-16 15:57:14 <Request 'http://myusername.pythonanywhere.com/' [POST]>
2021-11-16 15:57:14 {'track': [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10.234], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]}

但是,当我尝试使用第一段代码从我的 Web 应用程序发出请求时,我在日志中得到了这个:

2021-11-16 15:54:21 Test message!
2021-11-16 15:54:21 <Request 'http://myusername.pythonanywhere.com/' [POST]>
2021-11-16 15:54:21 None

服务器代码:

@app.route('/', methods=['POST'])
def handle_post():
    req_data = request.get_json()
    print("Test message!")
    print(request)
    print(req_data)

    data = req_data['track']
    trackData = np.array(data)
    grade = analysisV2(trackData)
    return jsonify({"grade": grade})

我不知道为什么一个请求有效而另一个请求无效。我也尝试过将我在 Insomnia 中使用的相同数据硬编码到 JS 请求正文中,没有任何区别。有人看到我可能遗漏的东西吗?

我设法弄清楚发生了什么,以防有人想知道并且恰好在做类似的事情。

这里有几个问题:

  1. 向请求添加 mode: 'no-cors' 会阻止服务器响应任何实际数据,因此必须将其删除。
  2. Flask 中的 get_json() 方法在这种情况下由于某种原因无法正常工作,所以我只是使用了 json.loads(request.get_data()) 方法。在响应中,还使用了 json.dumps() 方法,而不是 .jsonify()。
  3. 客户端必须发送带有 'Access-Control-Allow-Origin': '*' header 的请求。
  4. 服务器还需要使用 from flask_cors import CORSCORS(app)
  5. 启用 CORS