#python #reactjs #flask #axios #flask-restful
#python #reactjs #flask #axios #flask-restful
Вопрос:
вот строка кода, возвращающая сообщение об ошибке из flask api
return jsonify(message='wrong username or password'),400
читаю его отсюда в react js
axios
.post("http://127.0.0.1:5000/authentication/login", body)
.then((res) => {
console.log(res)
})
.catch((error) => {
console.log(error);
});
и это то, что я вижу в консоли
{"message":"Request failed with status code 400","name":"Error","stack":"Error: Request failed with status code 400n at createError (http://localhost:3000/static/js/1.chunk.js:854:15)n at settle (http://localhost:3000/static/js/1.chunk.js:1075:12)n at XMLHttpRequest.handleLoad (http://localhost:3000/static/js/1.chunk.js:329:7)","config":{"url":"http://127.0.0.1:5000/auth/login","method":"post","data":"{"phone":"","password":""}","headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json"},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1}}
Результаты не содержат пользовательского сообщения «неправильное имя пользователя или пароль»
Комментарии:
1. можете ли вы убедиться, что ваш код даже достигает инструкции return. я думаю, что с вашим запросом возникла проблема, и ответ, который вы видите, исходит от самого flask.
2. он достигает инструкции return, jsonify (сообщение = ‘неправильное имя пользователя или пароль’), 400.. он также может определить свой код состояния (400), но не возвращает пользовательское сообщение об ошибке. сообщение = ‘неправильное имя пользователя или пароль’
3. или есть лучший способ вернуть ошибку, отличный от использования jsonify?
Ответ №1:
на самом деле получили решение, что-то простое
данные об ошибке могут быть доступны из
console.log(error.response.data);
Ответ №2:
flask по умолчанию возвращает html-страницу вместо json при возникновении ошибки. чтобы заставить run возвращать обычный json, как в ответах 200, напишите это в своем приложении flask:
from werkzeug.exceptions import HTTPException
@app.errorhandler(HTTPException)
def handle_exception(e):
"""Return JSON instead of HTML for HTTP errors."""
print(e)
# start with the correct headers and status code from the error
response = e.get_response()
# replace the body with JSON
response.data = json.dumps({
"code": e.code,
"name": e.name,
"description": e.description,
})
response.content_type = "application/json"
return response
тогда, например, для такого возврата в flask
...
return json.dumps(str(e)), 409
и затем вы можете перехватить его в своем js:
...
}).then(function(response) {
...
}).catch((error) => {
console.log(error.response.data); // will log your error as string
})