POST 获取请求返回 400(阅读问题)

POST request on fetch is returning a 400 (read question)

我有一个问题。

我正在为 JS 使用 fetch API,并试图向服务器发送 POST 请求。但是,服务器以 400 或“错误请求”响应。有问题的服务器是一个烧瓶网络服务器。

代码:

fetch('https://webserver.com/post', {
        method: "POST", 
        body: JSON.stringify(data)
    })
    .then(alert('Post created!'))

其中 data 是一个全局变量,其中包含我要在请求中发送的数据。

服务器代码(在Python):

@app.route('/post', methods=['POST'])
def newpost():
    data1 = request.form['data1']
    data2 = request.form['data2']
    data3 = request.form['data3']
    if data1 in list(db.keys()):
        resp = Response('error')
    else:
        db[data1] = [data2, data3]
        resp = Response('Success')
    resp.headers['Access-Control-Allow-Origin'] = '*'
    print('yep we got a post request')
    return resp

这里,db 是我的数据库。

应该发生的是服务器发回 200,并将数据保存在数据库中。有谁知道我为什么得到 400,以及如何解决它?

Flask 可能对内容类型很挑剔,因此最好指定 Content-Type header。此外,request.form 适用于 HTML 表单,但您发送的是 JSON,所以您正在寻找类似于:

fetch('https://webserver.com/post', {
    method: "POST",
    body: JSON.stringify(data),
    cache: "no-cache",
    headers: new Headers({
      "Content-Type": "application/json"
    })
  })
  .then(alert('Post created!'))

在 JS 方面。

对于您的 Flask 应用:

@app.route('/post', methods=['POST'])
def newpost():
    data0 = request.get_json()
    data1 = data0['data1']
    data2 = data0['data2']
    data3 = data0['data3']
    if data1 in list(db.keys()):
        resp = Response('error')
    else:
        db[data1] = [data2, data3]
        resp = Response('Success')
    resp.headers['Access-Control-Allow-Origin'] = '*'
    print('yep we got a post request')
    return resp

这假设您发送的 JSON data 包含属性 data1data2data3