React App 和后端 API 最佳实践

React App and Backend API best practice

我有 React 应用程序和 React Router 用于客户端路由和 Rest API 通过 Express 后端(React 应用程序正在使用 API 获取数据)

目前,我的 Express 路由配置为 '/' 转到包装 React javascript 文件的 html 文件,然后路由到后端 API

我有用于客户端路由的反应路由器,它使路由变得复杂。

我想知道将我的应用程序分成两个是否会更好:React 应用程序和后端 API 和 运行 两个节点实例

最佳做法是什么?

这是一个简单的 server.js 我正在用于我的一个项目。

// server.js
import express from 'express'
import router from './api/router'
import { port } from './config'


express()
  .use(express.static(__dirname + '/public'))
  .use('/api', router)
  .use('*', (_, res) => res.sendFile(__dirname + '/public/index.html'))
  .listen(port, _ => console.log(`listening on ${port}`))

public 里面是我的 index.html、styles.css 和 bundle.js。在 app.use('*', ...) 服务器将发送 index.html.

一个更彻底的方法是编写一个使用 react-routermatch 函数用于 server-side rendering 的快速中间件,而不是仅在 [=16] 上发送 index.html =].例如:

import { renderToString } from 'react-dom/server'
import { match, RouterContext } from 'react-router'
import routes from './route-config' // <-- react routes

export const renderPage = ({ url }, res) =>

  match({ routes, location: url }, (err, redirect, renderProps) => {

    if (err)
      return res.status(500).send(err.message)

    if (redirect)
      return res.redirect(302, redirect.pathname + redirect.search)

    if (renderProps) {
      return res
        .status(200)
        .send(renderToString(<RouterContext { ...renderProps }/>))
    }

    res.status(404).send('Not found')
  })

该方法使您能够正确处理 404 和重定向。