FastAPI:无法使错误处理按预期工作
FastAPI: Cannot get error handling to work as expected
我只是在学习 FastAPI(并且喜欢它),所以很可能我做错了什么。但这是我的问题:
在下面的代码片段中,我正在创建一个新用户,如果还没有用户。
代码工作正常,但我遇到的问题是错误处理。错误被正确地推送到 FastAPI 的内部文档或像 Postman 这样的 API 客户端,但不会返回到我正在使用的实际客户端或命令行。
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = crud.get_user_by_username(db, username=user.username)
if db_user:
raise HTTPException(
status_code=400, detail=f"Username '{user.username}' already registered"
)
return crud.create_user(db=db, user=user)
如果我使用自动生成的 FastAPI 文档(或 Postman)并以这种方式监控响应,我会收到预期的错误:
但是当我查看 在客户端 (Vue) 或 uvicorn
服务器正在记录的内容时 [=41] =],它不包含该信息:
如你所见,它只是说 Bad Request
而不是用 {"detail": "Username 'miketest' already registered"}
的 JSON dict 来响应
我做错了什么?我该怎么做才能确保返回完整的 HTTPException
信息?我很确定问题出在 FastAPI 端,因为客户端也准确接收到服务器输出的内容。
This screenshot属于控制台日志,不会包含API响应,JSON响应。
如果您使用 POSTMAN.
等客户端向 API 发送请求,您可以看到实际响应
我发现了问题,这本身不是 FastAPI 问题,而是关于如何将信息传回前端的问题。
我想我应该保留这个问题以防有人遇到同样的问题。
解决方案:
try {
await api().post('register',JSON.stringify(data);
} catch (err) {
error = err.response.data.detail;
}
也就是说,FastAPI发送的error是一个对象,里面有一个response
,里面有一个data
,里面有一个detail
].
Postman 或任何类似的回复只给出了一个带有 detail
的对象。我没有看到中间的 data
层,而且我在 Vue 中看到整个对象时遇到了麻烦。
我只是在学习 FastAPI(并且喜欢它),所以很可能我做错了什么。但这是我的问题:
在下面的代码片段中,我正在创建一个新用户,如果还没有用户。
代码工作正常,但我遇到的问题是错误处理。错误被正确地推送到 FastAPI 的内部文档或像 Postman 这样的 API 客户端,但不会返回到我正在使用的实际客户端或命令行。
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = crud.get_user_by_username(db, username=user.username)
if db_user:
raise HTTPException(
status_code=400, detail=f"Username '{user.username}' already registered"
)
return crud.create_user(db=db, user=user)
如果我使用自动生成的 FastAPI 文档(或 Postman)并以这种方式监控响应,我会收到预期的错误:
但是当我查看 在客户端 (Vue) 或 uvicorn
服务器正在记录的内容时 [=41] =],它不包含该信息:
如你所见,它只是说 Bad Request
而不是用 {"detail": "Username 'miketest' already registered"}
我做错了什么?我该怎么做才能确保返回完整的 HTTPException
信息?我很确定问题出在 FastAPI 端,因为客户端也准确接收到服务器输出的内容。
This screenshot属于控制台日志,不会包含API响应,JSON响应。
如果您使用 POSTMAN.
等客户端向 API 发送请求,您可以看到实际响应我发现了问题,这本身不是 FastAPI 问题,而是关于如何将信息传回前端的问题。
我想我应该保留这个问题以防有人遇到同样的问题。
解决方案:
try {
await api().post('register',JSON.stringify(data);
} catch (err) {
error = err.response.data.detail;
}
也就是说,FastAPI发送的error是一个对象,里面有一个response
,里面有一个data
,里面有一个detail
].
Postman 或任何类似的回复只给出了一个带有 detail
的对象。我没有看到中间的 data
层,而且我在 Vue 中看到整个对象时遇到了麻烦。