⤵️
[Next.js + Fastapi]Next.jsからfetchでデータをfastapiに送る方法
このコードにたどり着くまで2日かかってしまったので…
注意
Next.js App Routerの方を使っています。
Pages Routerではないので注意してください。
コード例
Nextjs側
page.tsx
async function sendMessage(formData: FormData) {
"use server";
const json = JSON.stringify(Object.fromEntries(formData));
await fetch("http://127.0.0.1:8000/receive-json-response/", {
method: "POST",
body: json,
headers: {
"Content-Type": "application/json",
},
}).then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error("Something went wrong");
}
});
}
sendMessage
は<form action={sendMessage}>
内の<button type="submit"></button>
を押すことで開始される処理とします。
Fastapi側
main.py
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.post("/receive-json-response")
async def receive_form_data(request:Request) -> dict:
data = await request.json()
print(data.get("message"))
return {"Received Data": "OK"}
解説
上記のコードでは、Next.jsからFastAPIへのデータの送信が行われています。Next.js側では、fetch
を使用してhttp://127.0.0.1:8000/receive-json-response/
に対してPOSTリクエストを行っています。送信するデータはJSON形式で、ヘッダーにContent-Type: application/json
を設定しています。
一方、FastAPI側では、/receive-json-response
エンドポイントを設定してPOSTリクエストを受け付け、送られてきたJSONデータを読み取っています。このコードを使用することで、Next.jsからFastAPIへのデータ送信が可能になります。
情報がなさすぎる…
Nextjs自体は結構な歴史があるけどApp Router自体は1年くらい前の技術だから情報がない、
Fastapiも歴史が浅いので情報がない、
といった具合で情報が少ないとめっちゃ苦戦してしまいますね…
Discussion