Strapi向Next.js取数据时API响应与URL返回数据不一致
调试Strapi与Next.js数据不匹配问题的方案
排查Next.js的fetch缓存机制
Next.js默认会对fetch请求做缓存,哪怕URL变更也可能读取旧缓存。可以在请求中强制禁用缓存测试:const res = await fetch(url.href, { cache: 'no-store' });或者给URL追加随机参数绕过缓存:
url.searchParams.append('timestamp', Date.now());直接验证Strapi API响应
用Postman、curl或者浏览器直接访问console.log(url.href)输出的API链接,确认返回的是否为id=40的单条数据。如果Strapi返回的是旧数据,要检查:- 品牌筛选参数是否正确(比如
brand字段值是否为bonux,有无大小写/拼写错误) - 关联图片的查询语法是否有误,是否意外影响了结果集
- Strapi后台的产品数据是否真的更新(比如id=40的产品是否存在、品牌是否正确)
- 品牌筛选参数是否正确(比如
检查
getStrapiData()函数逻辑- 确认函数内没有全局变量缓存旧数据,每次调用都重新发起请求
- 打印响应的状态码和头信息,判断是否存在缓存头影响:
console.log(res.status, res.headers.get('cache-control')); - 排查是否对返回的
data做了额外过滤/映射处理,导致旧数据残留
清理开发环境缓存
- 重启Next.js开发服务器,避免内存缓存干扰
- 用
Ctrl+Shift+R强制刷新浏览器,清空浏览器本地缓存
查看实际网络请求
打开浏览器开发者工具的Network面板,对比实际发送的请求URL和console.log(url.href)是否一致,同时查看响应内容是否为旧数据。如果URL不一致,说明构造URL的逻辑存在问题;如果URL一致但响应旧,锁定为缓存或Strapi端问题
内容的提问来源于stack exchange,提问作者Rom-888
相关产品推荐
相关产品推荐

