NextJS中的Express路由和客户端路由之间是什么关系?

时间:2019-01-20 19:47:39

标签: javascript reactjs next.js

我是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)
    })

我是否在正确的道路上理解这一点?

1 个答案:

答案 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 并刷新页面,然后表示,如果您使用下一个路由器进行路由,则它将是客户端。