Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在膝关节炎反应路由器中使用浏览器历史_Javascript_Node.js_Reactjs_React Router_Koa - Fatal编程技术网

Javascript 如何在膝关节炎反应路由器中使用浏览器历史

Javascript 如何在膝关节炎反应路由器中使用浏览器历史,javascript,node.js,reactjs,react-router,koa,Javascript,Node.js,Reactjs,React Router,Koa,在express中,我们可以使用以下代码来处理请求。当路由器未处理请求时,服务器端将发送index.html app.get('*', function (request, response){ response.sendFile(path.resolve(__dirname, '../public', 'index.html')) }) 但是在膝关节炎中,下面的代码不起作用。当请求没有被koa路由器处理时,它将返回404而不是index.html var send = require('

在express中,我们可以使用以下代码来处理请求。当路由器未处理请求时,服务器端将发送index.html

app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, '../public', 'index.html'))
})
<>但是在膝关节炎中,下面的代码不起作用。当请求没有被koa路由器处理时,它将返回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')
  })

基本上,您要实现的是服务器渲染。 您需要使用match&RouterContext编写路由配置<代码>反应路由器对此有详细的文档

在膝关节炎的情况下,大致可以这样做。

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)
我在网上找到了几份似乎相当不错的回购协议。不过我还没有证实


这对我很有效

你能定义“不起作用”吗?它会抛出错误吗?它没用吗?它会返回里克·阿斯特利的照片吗?@ivarni很抱歉没有清晰的信息。我刚刚更新了这个问题,听起来更像是他们试图实现的是使用HTML5历史API,它根本不需要您呈现服务器端。但要使用页面刷新,每个URL都需要返回相同的
index.html
文件。工作
express
示例清楚地表明了这一点。
router.get('*', async function(ctx, next) {
  var html = fs.readFileSync(path.resolve('./build/index.html'));
  ctx.type = 'html';
  ctx.body = html;
})