Next.js 15.1.6关闭JS时服务端调用cookies报请求域错误求助
使用Next.js 15.1.6版本,通过客户端组件的表单action属性调用服务端Action时,浏览器开启JavaScript功能正常,但关闭JavaScript后会抛出Error: cookies was called outside a request scope错误,无痕模式下关闭JS测试也会出现相同问题。
相关代码
testAction.ts
"use server"; import { cookies } from "next/headers"; export async function checkCookiesAction() { const cookieStore = await cookies(); console.log(cookieStore.getAll()); }
page.tsx
"use client"; import { checkCookiesAction } from "./testAction"; export default function Page() { return ( <form action={checkCookiesAction}> <button type="submit">Login</button> </form> ); }
问题原因及解决方法
问题出在服务端Action中错误地使用了await cookies()——Next.js从next/headers导入的cookies()是同步函数,不需要加await。开启JS时,客户端通过AJAX调用Action,上下文保留正常;但关闭JS后,表单提交是普通HTTP请求,await会导致函数执行脱离请求上下文,从而触发报错。
修改testAction.ts,移除await即可解决:
"use server"; import { cookies } from "next/headers"; export async function checkCookiesAction() { const cookieStore = cookies(); console.log(cookieStore.getAll()); }
额外注意点:
- 服务端Action的
"use server";指令必须放在文件最顶部,不能有任何代码(包括导入语句)在它之前 - 客户端组件导入服务端Action时,Next.js会自动处理为远程调用,无需额外配置
内容的提问来源于stack exchange,提问作者Dev-LaJu
相关产品推荐
相关产品推荐

