在快递中,我们可以使用以下代码来处理请求。当路由器未处理的请求时,服务器端将发送index.html。
app.get('*', function (request, response){
response.sendFile(path.resolve(__dirname, '../public', 'index.html'))
})
但是在koa中,以下代码不起作用。当请求未由koa-router处理时,它将返回404而不是index.html。
var send = require('koa-send')
var serve = require('koa-static')
var router = require('koa-router')
var koa = require('koa')
var app = koa();
app.use(serve(__dirname+'/../public'));
app.use(function *(){
yield send(this, path.join(__dirname, '/../public/','index.html' )); })
app.use(router.routes())
以下代码也不起作用
router
.get('*', function* () {
yield send(this, __dirname +'/../public/index.html')
})
答案 0 :(得分:0)
router.get('*', async function(ctx, next) {
var html = fs.readFileSync(path.resolve('./build/index.html'));
ctx.type = 'html';
ctx.body = html;
})
这对我有用
答案 1 :(得分:-1)
基本上你要实现的是服务器渲染。
您需要使用匹配&编写路由配置。 RouterContext。 react-router
有详细的文档。
Server Rendering in react-router
如果是koa,可以用这种方式大致完成。
import router from 'koa-router'
import { match, RouterContext } from 'react-router'
const koaRouter = router()
const otherRouter = () => {
return new Promise((resolve, reject) => {
match({ routes, location }, (error, redirectLocation, renderProps) => {
...
..
.
}
}
koaRouter
.use(otherRouter)
我在网上发现了几个看起来很不错的回购。我虽然没有验证过它们。