FastAPI POST 端点每个单个 POST 请求运行 4 次

问题描述 投票:0回答:1

运行 FastAPI 服务器时,我有一个 POST 端点,由于某种原因,每个 POST 请求运行 4 次。

FastAPI后端代码:

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
[...]
@app.post("/create_new_session")
async def create_session(session_id: str, user_id: int = -1):
    create_new_session(session_id, user_id)
    logger.info(
        "created new session", extra={"session_id": session_id, "user_id": user_id}
    )

反应前端代码:

function APP():
  [...]
  useEffect(() => {
    const dontUseSessionIdCookie = process.env.REACT_APP_DONT_USE_USER_ID_COOKIE === "true";
    datadogLogs.logger.info(`using session_id cookie: ${!dontUseSessionIdCookie}`, {'session-id': sessionId})
    const foundSessionId = dontUseSessionIdCookie ? undefined : Cookies.get('session_id');
    if (foundSessionId) {
      setSessionId(foundSessionId);
    } else {
      const sessionId = uuidv4();
      datadogLogs.logger.info('New session started', {'session-id': sessionId});  // Logs a new UUID
      Cookies.set('session_id', sessionId, { expires: 7 });
      setSessionId(sessionId);
      fetch(`${api_server_url}/create_new_session?session_id=${sessionId}`, {
        method: 'POST',
        redirect: 'follow',
      })
        .then(response => response.json())
        .then(data => datadogLogs.logger.info('Created new session', { 'data': data, 'session-id': sessionId }))
        .catch((error) => {
          datadogLogs.logger.error('Error while creating a new session:', { 'error': error, 'session-id': sessionId });
        });
    }
  }, [])

为了确保只有一个 post 请求,我在 Wireshark 中捕获了所有 HTTP 流量,并且确实只看到了一个请求。 当在 BE 入口点插入断点时,我看到请求具有相同的 src 端口、相同的会话 ID,以及调用之间约 800 毫秒的差异。 这种情况既发生在本地,也发生在我们在生产环境中运行时(在 Herkou 上)。

有什么想法吗? 谢谢:D

我检查了前端和后端日志,发现前端确实有 1 条日志,后端有 4 条日志。我使用wireshark来确保没有一些我不知道的重试逻辑。我已在入口点插入断点,并手动检查每个入口请求以尝试找到线索。

javascript reactjs cors fastapi uvicorn
1个回答
0
投票

这实际上是记录器的问题,而不是 FastAPI 端点的问题。记录器的问题是该线程的重复: Python 日志模块多次打印行

© www.soinside.com 2019 - 2024. All rights reserved.