我是NextJS的新手,试图了解Express中定义的路由与NextJS的React部分“客户端”中定义的路由之间的关系。具体来说,如果在Express端定义了一条路由,例如
router.get("/aLonelyRoute",(req,res)=> {
res.end("You made it!")
})
在客户端没有相应的“页面”(我们的React应用中有以下页面
pages/index.js
pages/something.js
pages/another.js
),如果从浏览器发出对/aLonelyRoute
的请求,将始终由Express服务器提供服务,而不是从客户端提供吗?
此外,如果Express服务器提供的页面*与*反映在“客户端”一侧的路由相对应,那么app.render
自动可以通过以下方式为其服务:服务器或从客户端呈现它,具体取决于:
router.get("/something",(req,res)=> {
app.render(req,res,'something',query)
})
我是否在正确的道路上理解这一点?
答案 0 :(得分:1)
您将express
用于自定义SSR(服务器端渲染)。 -当您刷新页面或在网址栏中输入网址并按Enter时,这是一种简单的方法。 Express和Next.js
路由器可以共同为页面提供服务,但是这取决于所要求的呈现方式。如果是客户端渲染,则next.js将接管,如果是SSR,则Express将首先接管(Next.js将要求快递接管)。
server.get('/p/:id', (req, res) => {
const actualPage = '/post'
const queryParams = { title: req.params.id }
app.render(req, res, actualPage, queryParams)
})
在上面的示例中,如果有客户端渲染,则用户将进行类似/post/a-cool-post
的操作,但是服务器将收到{strong>屏蔽了{strong>} /post?id=a-cool-post
的{{1}} 。请注意,/p/a-cool-post
不存在。这是一个掩码URL。在此示例中查看 as 。
/p/...
长话短说,这意味着我们要询问快递(在这种情况下是服务器端渲染),如果路由类似于<Link as={`/p/${post.id}`} href={`/post?title=${post.title}`}>
<a>{post.title}</a>
</Link>
,请给我们/p/a-cool-post
这是客户端渲染。因此客户端和服务器中的路由将相同。
第一个问题:
/post/a-cool-post
仅表示形式,没有代码可以告诉客户-代号中的等效内容。因此它只会从服务器渲染。
第二个问题: 是的,这是正确的。取决于用户的要求,如果他们在网址栏中输入网址并按Enter 并刷新页面,然后表示,如果您使用下一个路由器进行路由,则它将是客户端。