Node.js 使用Express设置React路由器

Node.js 使用Express设置React路由器,node.js,mongodb,express,reactjs,react-router,Node.js,Mongodb,Express,Reactjs,React Router,我有几个问题是关于设置React with Express的 首先,我对Express和React路由器使用相同的路由路径。我以为这些应该是匹配的。但当我导航到一个页面api/blogPosts时,它只显示了我从MongoDB获取的数据的JSON格式。也就是说,快速路线将覆盖React视图。我知道我可以在React Router中修改路由路径(例如,前面没有“api”),以便有不同的路由。然后,它将按预期显示React视图,同时仍进行api调用。不过,我还是认为路线应该是匹配的。我该如何妥善处理

我有几个问题是关于设置React with Express的

首先,我对Express和React路由器使用相同的路由路径。我以为这些应该是匹配的。但当我导航到一个页面api/blogPosts时,它只显示了我从MongoDB获取的数据的JSON格式。也就是说,快速路线将覆盖React视图。我知道我可以在React Router中修改路由路径(例如,前面没有“api”),以便有不同的路由。然后,它将按预期显示React视图,同时仍进行api调用。不过,我还是认为路线应该是匹配的。我该如何妥善处理

其次,我使用了express.Router(),我不确定这是否必要。我应该何时使用express.Router(),何时只使用app.get、app.post等

第三,当人们讨论客户端路由时,他们是在讨论像React路由器这样的事情吗?当人们讨论服务器端路由时,他们只是指像apiRouter调用那样对数据库进行api调用吗

routes.js

<Route component={App}>
  <Route path='/' component={Home} />
  <Route path='/api/blogPosts/create' component={Create} />
  <Route path='/api/blogPosts/:blogPostId' component={BlogPost} />
</Route>

所以,根据我的经验,React路由器用于单页应用程序的客户端路由。这意味着它使用浏览器的历史api使其看起来像是浏览器要走不同的路线,而实际上没有离开原始页面。express路由是服务器端路由,用于与某些API或数据库进行交互(如您所提到的),或者用于在该URL上提供新页面

至于什么时候应该使用expressRouter vs app.get,我想说的是,尽可能使用路由器,因为这是一个很好的实践。这里有一个相当不错的解释


最后,如果您想使用react router进行服务器端渲染,请查看此处:

您需要添加一个非api路由来为SPA(单页应用程序)服务

创建另一个express路由器,然后添加此路由器

router.use('*',function(req,res,next){
var indexFile = path.resolve(__dirname,'./public/index.html');
res.sendFile(indexFile);
})


或者,您可以将index.html放在公用文件夹中,然后从该索引页加载SPA。

好的,这有帮助。但我仍然不知道我应该如何标记东西,因为apiRouter会覆盖我在React Router中使用的任何东西。
router.use('*',function(req,res,next){
var indexFile = path.resolve(__dirname,'./public/index.html');
res.sendFile(indexFile);