FastAPIとReactでアプリを開発しています。テスト用のAPI(routers.py)を作成して、リクエストの内容をログに残すミドルウェア(check2.py)を用意しました。
しかし、/new_postに適切にリクエストをしてもレスポンスが帰ってきません。
しかしミドルウェア(check2.py)の処理の中身をコメントアウトし
response = await call_next(request)
return response
2行だけにしてAPIにリクエストを飛ばしたところ正常に応答が帰ってくるようになりました。
このことからログを表示するために作成したミドルウェアに問題があると考えられますがどこが原因か分からないため教えていただけないでしょうか。
check2.py
1from fastapi import Request 2import json 3 4async def log_request2(request: Request, call_next): 5 if "application/json" in request.headers.get("Content-Type", ""): 6 try: 7 json_data = await request.json() 8 print("Request JSON Body:") 9 print(json.dumps(json_data, indent=2)) 10 except Exception as e: 11 print("Failed to parse JSON body:", str(e)) 12 else: 13 body = await request.body() 14 print("Request Body:") 15 print(body) 16 response = await call_next(request) 17 return response
main.py
1from fastapi import FastAPI, Request 2from fastapi.middleware.cors import CORSMiddleware 3from database.db import database 4from middlewares.check2 import log_request2 5from users.router import router as userrouter 6from photos.routers.routers import router as photorouter 7 8import logging 9 10app = FastAPI() 11 12origins = [ 13 "http://localhost:3000", 14] 15 16app.add_middleware( 17 CORSMiddleware, 18 allow_origins=origins, 19 allow_credentials=True, 20 allow_methods=["*"], 21 allow_headers=["*"], 22) 23 24app.middleware("http")(log_request2) 25 26app.include_router(photorouter)
routers.py
1router = APIRouter() 2 3class Post(BaseModel): 4 key1: str 5 key2: str 6 7@router.post("/new_post", status_code=status.HTTP_201_CREATED) 8async def new_post(post_data: Post): 9 print("/new_post") 10 # 受け取ったデータのkey1とkey2の値を変更する 11 response_data = {"key1": "変換済み1 " + post_data.key1, "key2": "変換済み2 " + post_data.key2} 12 # 変更後のデータをJSONレスポンスとして返す 13 return response_data
これかな?
https://github.com/tiangolo/fastapi/issues/394
追記。また、どんなアプリを開発するかによりますが、ユーザー登録やログインにおいてパスワードなどの秘密情報をログに残すことは慎むべきでしょうね。
https://www.jpcert.or.jp/java-rules/fio13-j.html

回答1件
あなたの回答
tips
プレビュー