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 中看到整个对象时遇到了麻烦。