在 NextJS 路由中的 slug 前面添加符号(例如 @)

Posted

技术标签:

【中文标题】在 NextJS 路由中的 slug 前面添加符号(例如 @)【英文标题】:Adding symbol (e.g. @) in front of slug in NextJS route 【发布时间】:2021-05-29 00:36:39 【问题描述】:

我正在尝试在 slug URL 前添加 @。例如:https://example.com/@username

我尝试了@[username].js,但这不起作用。

这可能吗?

【问题讨论】:

您只需在地址栏中输入,@username 将作为参数传递给您的动态路由[username].js 【参考方案1】:

在您处理用户的后端,将@ 放在用户的用户名中。然后,只需将用户名视为纯文本 slug。这是因为 URL 中允许使用 @,就像 abc

Working example on StackBlitz.

pages/index.js:

import Link from 'next/link'

const username = '@foobar' // hardcoded example username, this will be recieved from your backend

export default function Index() 
    return (
        <Link href=username>
            <a>username</a>
        </Link>
    )

pages/[username].js:

import  useRouter  from 'next/router'

export default function Username() 
    const router = useRouter()
    const  username  = router.query

    return <h1>User: username</h1>

【讨论】:

【参考方案2】:

尝试使用rewrites 和一些正则表达式。 Next.js 在后台使用path-to-regexp。

  async rewrites() 
    return [
      
        source: '/:userId(@[a-zA-Z0-9]+)/:id*',
        destination: "/user/:userId/:id*",
      
    ]
  

在客户端使用next/link:

<Link href=`@$userId`>
  <a>user</a>
</Link>

【讨论】:

以上是关于在 NextJS 路由中的 slug 前面添加符号(例如 @)的主要内容,如果未能解决你的问题,请参考以下文章

您不能对同一动态路径 Nextjs 使用不同的 slug 名称

如何让 Next JS 动态路由与 RelayJS 一起使用

如何在 nuxtjs 中的参数路由器之间添加查询

在 NextJS 中是不是可以让自定义 _app.js 读取 slug、getInitialProps 并将这些道具传递给每个组件,包括所有页面?

NextJS:如何为生产构建添加屏幕加载?

Nextjs - 在服务器端访问 url 参数