Skip to content

Commit 89d7493

Browse files
author
何柯
committed
服务端渲染
1 parent 9292bb5 commit 89d7493

File tree

3 files changed

+63
-27
lines changed

3 files changed

+63
-27
lines changed

lessons/01-setting-up/index.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,9 @@
11
import React from 'react'
22
import { render } from 'react-dom'
3-
import {Router,Route,browserHistory,IndexRoute} from 'react-router'
4-
import App from './modules/App'
5-
import About from './modules/About'
6-
import Repos from './modules/Repos'
7-
import Repo from './modules/Repo'
8-
import Home from './modules/Home'
3+
import {Router,browserHistory} from 'react-router'
4+
import routes from './modules/routes'
95

10-
render((
11-
<Router history={browserHistory}>
12-
<Route path="/" component={App}>
13-
<IndexRoute component={Home}/>
14-
<Route path="/repos" component={Repos}>
15-
<Route path="/repos/:userName/:repoName" component={Repo}/>
16-
</Route>
17-
<Route path="/about" component={About}/>
18-
</Route>
19-
</Router>
20-
), document.getElementById('app'))
6+
render(
7+
<Router routes={routes} history={browserHistory}/>,
8+
document.getElementById('app')
9+
);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* Created by heke on 2016/6/7.
3+
*/
4+
import React from 'react'
5+
import {Route,IndexRoute} from 'react-router'
6+
import App from './App'
7+
import About from './About'
8+
import Repos from './Repos'
9+
import Repo from './Repo'
10+
import Home from './Home'
11+
12+
module.exports = (
13+
<Route path="/" component={App}>
14+
<IndexRoute component={Home}/>
15+
<Route path="/repos" component={Repos}>
16+
<Route path="/repos/:userName/:repoName" component={Repo}/>
17+
</Route>
18+
<Route path="/about" component={About}/>
19+
</Route>
20+
);
21+

lessons/01-setting-up/server.js

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,46 @@
11
/**
22
* Created by heoo442 on 2016/6/5.
33
*/
4-
var express = require('express')
5-
var path = require('path')
6-
var compression = require('compression')
4+
import express from 'express'
5+
import path from 'path'
6+
import compression from 'compression'
7+
import React from 'react';
8+
import {renderToString} from 'react-dom/server';
9+
import {match,RouterContext} from 'react-router';
10+
import routes from './modules/routes';
711

812
var app = express()
9-
//must be first
10-
app.use(compression())
11-
app.use(express.static(path.join(path.resolve(__dirname), 'public')))
13+
app.use(compression()); ////must be first
14+
app.use(express.static(path.join(path.resolve(__dirname), 'public'), {index: false}));
1215

13-
app.get('*', function (req, res) {
14-
res.sendFile(path.join(path.resolve(__dirname), 'public', 'index.html'))
15-
})
16+
app.get('*', (req, res) => {
17+
match({routes: routes, location: req.url}, (err, redirect, props)=> {
18+
if (err) {
19+
res.status(500).send(err.message);
20+
} else if (redirect) {
21+
res.redirect(redirect.pathname + redirect.search);
22+
} else if (props) {
23+
const appHtml = renderToString(<RouterContext {...props}/>);
24+
res.send(renderPage(appHtml));
25+
} else {
26+
res.status(404).send('Not Found');
27+
}
28+
});
29+
});
30+
31+
function renderPage(appHtml) {
32+
return `
33+
<!doctype html public="storage">
34+
<html>
35+
<meta charset=utf-8/>
36+
<title>My First React Router App</title>
37+
<link rel="stylesheet" href=/index.css>
38+
<div id=app>${appHtml}</div>
39+
<script src="/bundle.js"></script>
40+
`;
41+
}
1642

17-
var PORT = process.env.PORT || 8080
43+
var PORT = process.env.PORT || 8088
1844
app.listen(PORT, function () {
1945
console.log('Production Express server running at localhost:' + PORT)
2046
})

0 commit comments

Comments
 (0)