提取失败:带有200响应的POST Flask Restful API

时间:2019-01-30 23:19:52

标签: reactjs flask fetch

我正在尝试向我的Flask RESTful应用程序发出POST请求,在该应用程序中所有GET请求都可以正常响应,并且POST请求似乎可以正确答复(由Restlet客户端和curl测试),但是根据浏览器(chrome),它们失败(“加载失败:POST http://127.0.0.1:5000/login”)。

Python Flask RESTful代码:

login_parser = reqparse.RequestParser()
login_parser.add_argument('email', required=True, help="Es necesario un email")
login_parser.add_argument('password', required=True, help="Es necesaria una contraseña")
@app.route('/login', methods=['POST', 'GET'])
def login():
    args = login_parser.parse_args()
    try:
        user = Usuario.query.filter_by(email=args.email).first()
        if user and user.verify_password(args.password):
            token = user.encode_auth_token(user.id)
            if token:
                responseObject = {'status': 'success', 'message':'Successfully logged in.', 'token': token.decode()}
                return make_response(jsonify(responseObject)), 200
        else:
            responseObject = {'status': 'failed', 'message': 'Failed to login, usuario o contraseña incorrectos'}
            return make_response(jsonify(responseObject)), 400
    except Exception as e:
        responseObject = {'status': 'failed', 'message': e}
        return make_response(jsonify(responseObject)), 500
    return "Vaya uno a saber"

反应提取代码:

login = (event) => {
        event.preventDefault();
        let formData = new FormData();
        formData.append('email', this.state.username);
        formData.append('password', this.state.password);
        fetch(URL, {
            method: 'post',
            body: formData
        })
        .then(
            response => response.json
        ).then(
            json => {
                console.log(json.token);
            }
        )
    };

正如我所说,该api可以在除提取之外的所有客户端上工作,这给了我获得响应代码的机会(第一个“ then”中的response.status),但拒绝了获得json响应的机会,女巫必须是:

{'status':'成功','message':'成功登录。','token':THE TOKEN}

我真的为我的英语感到抱歉,但我正努力学习。从现在开始非常感谢您。 (我在StackOverflow中的第一个问题)

1 个答案:

答案 0 :(得分:0)

应该是:

  .then(
     response => response.json() // .json() is a promise function
  )