({ req, res, render, webpackStats, routerProps })
| 101 | } |
| 102 | |
| 103 | function sendWithReactRouter({ req, res, render, webpackStats, routerProps }) { |
| 104 | const { routes } = routerProps |
| 105 | const lastRoute = routes[routes.length - 1] |
| 106 | if (lastRoute.isServerRoute) { |
| 107 | handleServerRoute(req, res, lastRoute, { |
| 108 | params: routerProps.params, |
| 109 | location: routerProps.location, |
| 110 | routes: routerProps.routes, |
| 111 | route: lastRoute |
| 112 | }) |
| 113 | } else if (req.method !== 'GET') { |
| 114 | sendNoRoutesMatched(res) |
| 115 | } else { |
| 116 | render(routerProps, (err, { renderDocument, renderApp }) => { |
| 117 | if (err) { |
| 118 | onError(err, req, res) |
| 119 | } else { |
| 120 | const status = err ? err.status : (lastRoute.status || 200) |
| 121 | const appElement = renderApp(routerProps) |
| 122 | const content = getContent(req, appElement) |
| 123 | const documentElement = renderDocument({ |
| 124 | title: flushTitle(), |
| 125 | content: content, |
| 126 | scripts: getJavaScriptTags(webpackStats), |
| 127 | styles: getStyleTags(webpackStats) |
| 128 | }) |
| 129 | const markup = renderToStaticMarkup(documentElement) |
| 130 | res.status(status).send(`<!doctype html>\n${markup}`) |
| 131 | } |
| 132 | }) |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | function handleServerRoute(req, res, route, props) { |
| 137 | const handler = route[req.method.toLowerCase()] |
no test coverage detected