拓扑森林
首页OPC课程政企培训专属智能体项目投融资行业资讯站内论坛关于我们
登录
跳到主内容
    论坛/求助问答

    Next.js 中 cookies() 在 Server Action 外调用

    置顶前端魔法师·2025/07/10 22:49:32·0 浏览
    站内论坛
    教程论坛排行榜徽章
    前端
    前端魔法师楼主
    2025/07/10 22:49:32
    next-intl 配置后 404,一般是 middleware 匹配规则不对。检查 middleware.ts 中 matcher 配置,确保排除了 /api、/_next、/admin 等非国际化路径。另外检查 defaultLocale 和 locales 配置是否正确。
    
    Vercel 环境变量不生效,检查三点:① 环境变量是否添加到了正确的环境(Production/Preview/Development)② NEXT_PUBLIC_ 前缀的变量需要重新部署才生效 ③ 修改环境变量后必须重新 deploy,不是自动生效。
    
    Next.js 15 中 next/dynamic + ssr:false 在 Server Component 中不允许。解决:创建一个 'use client' 的包装组件,在包装组件中用 next/dynamic + ssr:false,然后在 Server Component 中导入这个包装组件。
    查看历史

    28 回复

    1. 老张
      老张第 2 楼2025/07/11 13:13:32
      我的结论恰恰相反:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。细节可以再展开讨论。
    2. 内卷
      内卷幸存者第 3 楼2025/07/11 13:13:32
      反对一下,我的测试结果不是这样:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。如有不对请指正。
    3. 打盹
      打盹的考拉第 4 楼2025/07/15 10:35:01
      这个思路很巧妙,revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。我也还在探索中。
    4. 结网
      结网的蜘蛛第 5 楼2025/07/15 22:48:01
      说说我自己的经历:Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。仅供参考,具体还是要看你的场景。
    5. 栈溢
      栈溢出幸存者第 6 楼2025/07/18 04:25:29
      Tailwind v4 升级后 @tailwind 指令改为 @import 'tailwindcss'。
    6. 竹林
      竹林深处第 7 楼2025/07/29 05:53:41
      我的项目里也用了这个方案,Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。仅供参考,具体还是要看你的场景。
    7. 算法
      算法炼丹师第 8 楼2025/08/03 17:13:34
      我的理解是:Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。如果有更好的方案求分享。
    8. 拾光
      拾光者第 9 楼2025/08/04 12:26:31
      有个更优的方案:next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。
    9. ST
      Stack Overflow copy手第 10 楼2025/08/08 06:36:12
      我调研过这块,Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。这只是个人经验,不一定通用。
    10. 迷路
      迷路的信鸽第 11 楼2025/08/10 20:31:04
      我的踩坑经验:Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。
    11. 接口
      接口焊接工第 12 楼2025/08/16 08:59:37
      反对一下,我的测试结果不是这样:Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。
    12. 精神
      精神小伙第 13 楼2025/08/17 10:37:40
      上周刚好踩了这个坑,useSession() 返回 null 检查 SessionProvider 是否包裹了组件。有疑问可以继续问。
    13. 逻辑
      逻辑编织者第 14 楼2025/08/17 21:06:05
      有个更优的方案:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。
    14. 产品
      产品对立面第 15 楼2025/08/28 18:43:20
      我的项目里也用了这个方案,middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。如有不对请指正。
    15. 思考
      思考的柴犬第 16 楼2025/08/30 00:50:14
      Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。
    16. 编译
      编译通过就行第 17 楼2025/09/01 03:08:04
      我之前也遇到过类似问题,cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。欢迎大家补充。
    17. 注释
      注释写故事第 18 楼2025/09/04 16:34:33
      分享一下我的做法:revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。希望对你有帮助。
    18. 像素
      像素调配师第 19 楼2025/09/08 08:25:32
      有个细节值得注意:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。希望对你有帮助。
    19. 快乐
      快乐星球居民第 20 楼2025/09/08 08:25:32
      补充一个边界情况:Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。一起学习。
    20. 潜水
      潜水员第 21 楼2025/09/14 19:28:15
      我的理解是:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。感谢楼主的启发。
    登录后可回复
    前端

    前端魔法师

    楼主个人主页

    帖子信息

    28 回复
    0 浏览
    20 赞
    0 收藏
    回复