如何为React提供服务index.html并在相同路径下处理路由?

时间:2019-02-08 18:22:55

标签: node.js reactjs express fastify

如果用户尚未下载react_app.js(是首次访问),则使用react需要在任何路径下为index.html提供包含react_app.js的内容。

然后,您需要提供来自react_app.js的一些api调用,但是,如果您对GET使用相同的网址,那么,您将获得API调用响应,而不是带有react_app.js的index.html。

对此有什么解决方案?仅使用某些前缀进行api调用,并且仅在找不到路由时才发送index.html?

我的代码:

fastify.register(require('fastify-static'), {
  root: path.join(__dirname, './static')
})

fastify.route({
  method: 'GET',
  url: '/',
  handler: async (req, res) => {
    res.send('you will get api call answer but you need to serve index.html with react_app.js first!!!!')
  }
})

1 个答案:

答案 0 :(得分:0)

如@Garrert所建议的,这是它的工作方式:

// Статические файлы
fastify.register(require('fastify-static'), {
  root: path.join(__dirname, './static')
})

// this will work with fastify-static and send ./static/index.html
fastify.setNotFoundHandler((req, res) => {
  res.sendFile('index.html')
})

// Here go yours routes with prefix
fastify.register(async openRoutes => {
  openRoutes.register(require('./server/api/open'))
}, { prefix: '/api' })