如何在Next.js中创建以特定字符开头的动态路由?
我想创建以@符号开头的路由我应该如何构造如何在Next.js中创建以特定字符开头的动态路由?,next.js,Next.js,我想创建以@符号开头的路由我应该如何构造页面文件夹? 首先,我尝试创建一个名为@的文件夹,但是它会创建一个以@进行的路由,比如www.example.com/@/something。我甚至尝试了文件夹的[@topic]和@[topic]名称,但效果并不理想 我想有这样的路线: www.example.com/@computer www.example.com/@music www.example.com/@programming 我如何处理这个问题 我的Next.js版本是9.2.1您只需将更改
页面
文件夹?
首先,我尝试创建一个名为@
的文件夹,但是它会创建一个以@
进行的路由,比如www.example.com/@/something
。我甚至尝试了文件夹的[@topic]
和@[topic]
名称,但效果并不理想
我想有这样的路线:
www.example.com/@computer
www.example.com/@music
www.example.com/@programming
我如何处理这个问题
我的
Next.js
版本是9.2.1
您只需将更改为链接的组件的道具,在需要的地方添加@
符号即可
例如,如果您保持Next.js提供的路由/结构,请将pages/post/[id]/
下的index.js
更改为以下内容:
从“下一个/路由器”导入{useRouter}
从“下一个/链接”导入链接
从“../../../components/Header”导入标题
const Post=()=>{
const router=useRouter()
const{id}=router.query
返回(
帖子:{id}
-
第一条评论
)
}
导出默认帖子
将为您提供如下URL:http://localhost:3000/post/@第一条/第一条评论
我希望这能帮助您找到解决方案。正如@Nico所提到的,我们可以通过Next.js
repo中的custom server
示例来探讨解决方案
页面的结构如下:Page->[topic]
我们需要在server.js
内部检查以@
符号开头的URL
的任何传入请求,为此,我们将获得正则表达式
内部express.js
的帮助:
const express = require('express')
const next = require('next')
const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
const server = express()
// this will match all the URLs that start with @
// e.g. @computer, @hello
server.get('/@*', (req, res) => {
return app.render(req, res, '/[topic]', req.query)
})
server.all('*', (req, res) => {
return handle(req, res)
})
server.listen(port, err => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`)
})
})
这只是将以@
开始的请求协调到[topic]
组件,就像处理其他路由一样
客户端的内部组件
就这么简单:
<Link href="/[topic]" as=`@${topicString}`/>
您可以通过不同的方式获取topicString
,比如在getInitialProps
中使用query
,如果您不想拥有自定义服务器,请尝试使用一些正则表达式。Next.js在引擎盖下使用
异步重写(){
返回[
{
资料来源:'/:userId(@[a-zA-Z0-9]+)/:id*,
目标:“/user/:userId/:id*”,
}
]
}
你还得洒水
正如其他海报所提到的。谢谢,但是如果用户从浏览器直接链接进入www.example.com/@计算机,那么我应该如何处理Next.js中的路由?如果您在页面
文件夹下有一个名为[part].js的文件,上述内容也不应该是问题。在你的[part].js的getInitialProps
上记录query
,js
将返回{part:'@computer'}
如果你在这方面有困难,试着在上面的问题上粘贴一部分代码,这样我可以进一步帮助你。实际上,我正在寻找的是一些通用的“页面”方式将匹配URL以“@”开头的结构查看自定义服务器