ここを見ろと言われる
However, the Edge Runtime does not support Node.js APIs and globals.
以下のこれらは駄目 (unsupported-apis)
middleware内で大きめなnpmなどを使っていると(firebaseとか)、だいたい引っかかる。
解決方法
https://nextjs.org/docs/api-reference/edge-runtime にはfetch
は使えると書いてある。
なので/pages/api/...
にmiddleware内で処理したい内容を書いて、そこをfetch
してしまえばいい。
middleware.ts
export async function middleware(request: NextRequest) {
const redirect404 = NextResponse.redirect(new URL("/404", request.url))
const value = request.cookies.get("login.user.cookie.name")?.value
if (!value) {
// クッキーがないなら404とか
return redirect404
}
if (!(await fetch(new URL(`/api/user/cookie/check/${value}`, request.url))).ok) {
// クッキーのデータからユーザーが見つからないなら404とか
return redirect404
}
const response = NextResponse.next()
// クッキーを更新するとか
response.cookies.set("login.user.cookie.name", value, {
httpOnly: true,
path: "/",
sameSite: "strict",
secure: true,
expires: ...
})
return response
}