Koa w/client 侧路由器
Koa w/client side router
现状:
前端:React 和 React-Router
后端:Koa
app.use(mount('/graphql', graphqlHTTP({ schema: schema })));
app.use(mount('/api', api));
app.use(serve(__dirname + '../../public')); //serves static index.html
当我在浏览器中点击 React Router 的 < Link > 时,每个网页都会显示。
每当我刷新页面或手动输入一个link。我得到一个 'not found' 页面。顺便说一句,这里没有服务器端渲染。如何让 React-Router 处理上面未指定的路由,即仅在客户端?
当页面刷新时,服务器必须响应一些东西;在这种情况下,它需要响应 index.html
以便客户端应用程序可以启动,然后 React Router 可以根据 URL.
挂载正确的组件
因此,服务器端,您需要告诉 Koa 为 每个 URL 服务 index.html
路线。
解决方案(根据上面的回答)
import router from 'koa-router';
import sendfile from 'koa-sendfile';
//code to initialize router
//...
router.get('*', function* () {
let stats = yield* sendfile.call(this, pathToIndexHtml));
if (!this.status) this.throw(404)
})
Koa 现在在每个未指定的路由上提供 index.html 服务。 :)
现状:
前端:React 和 React-Router
后端:Koa
app.use(mount('/graphql', graphqlHTTP({ schema: schema })));
app.use(mount('/api', api));
app.use(serve(__dirname + '../../public')); //serves static index.html
当我在浏览器中点击 React Router 的 < Link > 时,每个网页都会显示。 每当我刷新页面或手动输入一个link。我得到一个 'not found' 页面。顺便说一句,这里没有服务器端渲染。如何让 React-Router 处理上面未指定的路由,即仅在客户端?
当页面刷新时,服务器必须响应一些东西;在这种情况下,它需要响应 index.html
以便客户端应用程序可以启动,然后 React Router 可以根据 URL.
因此,服务器端,您需要告诉 Koa 为 每个 URL 服务 index.html
路线。
解决方案(根据上面的回答)
import router from 'koa-router';
import sendfile from 'koa-sendfile';
//code to initialize router
//...
router.get('*', function* () {
let stats = yield* sendfile.call(this, pathToIndexHtml));
if (!this.status) this.throw(404)
})
Koa 现在在每个未指定的路由上提供 index.html 服务。 :)