Next.js中Prisma在getServerSideProps查询无返回无报错如何解决?
排查步骤
1. 首先确认路由与Next.js版本适配
- 检查
comments.tsx是否放在pages目录下:只有pages路由下的页面组件才会自动执行getServerSideProps,放在components等非pages目录的组件不会触发该方法 - 确认你使用的是Pages Router:如果你用的是Next.js 13+的App Router,
getServerSideProps已废弃不支持,需要改用异步服务端组件写法实现服务端数据查询 - 检查页面路由是否匹配:如果你的文件是嵌套在pages子目录下,要确认访问路径和文件层级对应,比如
pages/casino/comments.tsx对应的访问路径是/casino/comments
2. 确认日志查看位置
getServerSideProps是服务端运行的方法,内部的console.log只会输出到你启动next dev的终端窗口,不会出现在浏览器控制台,先检查终端是否有对应的日志输出。
3. 修复代码中的明显错误
你定义的Props类型存在不匹配问题:
// 错误写法:findMany返回的是数组,不是单个对象 type Props = { comments?: CasinoComment; }; // 修正为 type Props = { comments?: CasinoComment[]; };
4. 排查Prisma相关问题
- 重新生成Prisma客户端:执行
npx prisma generate后重启开发服务,避免schema变更后客户端未更新导致的查询异常 - 单独测试Prisma查询:新建
pages/api/test-prisma.ts写入以下代码,访问/api/test-prisma看返回结果是否正常:
import prisma from "../../lib/prisma"; export default async function handler(req, res) { const count = await prisma.casinoComment.count(); const comments = await prisma.casinoComment.findMany(); console.log("查询结果", count, comments); res.status(200).json({ count, comments }); }
- 检查是否存在全局Prisma查询中间件:如果你配置了全局过滤逻辑(比如自动过滤
approved=false的记录),会导致无数据返回,可临时给findMany加{ where: {} }参数强制覆盖全局过滤规则测试。
5. 排查缓存问题
- 打开浏览器隐身窗口访问页面,或在地址后加随机查询参数(比如
/comments?test=123),避免静态缓存直接返回旧页面导致服务端逻辑不执行 - 检查
next.config.js是否配置了页面级静态缓存规则,强制页面走静态渲染导致getServerSideProps不触发
内容的提问来源于stack exchange,提问作者Cult of Tranquility
相关产品推荐
相关产品推荐

