You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中getServerSideProps获取的slug异常显示为wow如何解决?

解决Next.js动态路由getServerSideProps无法获取正确slug的问题

先修正getServerSideProps的返回逻辑

你当前代码硬编码返回了固定slug值,这会覆盖URL中的实际参数。先改成直接传递query里的真实slug:

export async function getServerSideProps({ query }) {
  console.log('request query:', query); // 先确认控制台输出的query内容
  // 直接使用URL中的slug参数,不要硬编码
  return {
    props: {
      slug: query.slug,
    },
  };
}

排查核心问题(为什么query.slug是'wow')

1. 检查路由优先级冲突

确认pages/detail目录下没有静态页面文件(比如wow.tsx),静态页面的匹配优先级高于动态路由[slug].tsx,如果存在wow.tsx,访问/detail/samsung-s23会被错误匹配到静态页面,导致query异常。

2. 清除开发服务器缓存

Next.js开发服务器可能缓存旧路由数据,直接重启服务器:

npm run dev # 重新启动开发服务

同时用浏览器无痕模式打开页面,避免客户端缓存干扰。

3. 检查next.config.js的路由规则

查看项目根目录的next.config.js,确认是否存在rewrites或redirects规则,有没有把/detail/:slug的请求重写到固定的wow路径:

// 示例错误重写规则,需要删除或修改
module.exports = {
  async rewrites() {
    return [
      {
        source: '/detail/:slug',
        destination: '/detail/wow', // 这种规则会强制替换slug为wow
      },
    ];
  },
};

4. 确认动态路由文件命名

确保动态路由文件命名是[slug].tsx,不要有拼写错误(比如写成[slugs].tsx或[slug].ts),否则无法正确匹配URL参数。

验证结果

修改完成后,访问localhost:3000/detail/samsung-s23?variant=black,查看控制台的request query输出,应该能看到:

query:{
  slug:'samsung-s23',
  variant:'black'
}

同时组件中console.log(slug)会输出samsung-s23。

内容的提问来源于stack exchange,提问作者am i a cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:36:30