Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d53f86

Browse files
author
西田 雅博
committed
html, js, cssでReactアプリを配信し、APIを提供するexpressサーバーを実装
1 parent 1b53fd8 commit 5d53f86

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

package.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,22 @@
33
"version": "0.1.0",
44
"private": true,
55
"devDependencies": {
6+
"npm-run-all": "^3.1.0",
67
"react-scripts": "0.6.1"
78
},
89
"dependencies": {
10+
"express": "^4.14.0",
911
"react": "^15.3.2",
1012
"react-dom": "^15.3.2"
1113
},
1214
"scripts": {
13-
"start": "react-scripts start",
15+
"start:dev": "react-scripts start",
1416
"build": "react-scripts build",
1517
"test": "react-scripts test --env=jsdom",
16-
"eject": "react-scripts eject"
17-
}
18+
"eject": "react-scripts eject",
19+
"server": "node server/server.js",
20+
"dev": "npm-run-all -p server start:dev",
21+
"start": "npm-run-all -s build server"
22+
},
23+
"proxy": "http://localhost:3001"
1824
}

server/server.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const express = require('express');
2+
const app = express();
3+
4+
// ポートの指定
5+
app.set('port', process.env.PORT || 3001);
6+
7+
// html, js, cssの静的ファイル
8+
var clientPath = __dirname.replace("/server", "/build");
9+
app.use('/', express.static(clientPath));
10+
11+
// GET /todos でTODOを返す
12+
app.get('/todos', (req, res, next) => {
13+
res.json([
14+
{ id: 0, text: 'do something' },
15+
{ id: 1, text: 'learn react'}
16+
]);
17+
});
18+
19+
// 指定したポートでリクエスト待機状態にする
20+
app.listen(app.get('port'), () => {
21+
console.log('server listening on port :' + app.get('port'));
22+
});

src/App.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,26 @@ import logo from './logo.svg';
33
import './App.css';
44

55
class App extends Component {
6+
7+
constructor(props) {
8+
super(props);
9+
this.state = {
10+
todos: []
11+
};
12+
}
13+
14+
componentDidMount() {
15+
fetch('/todos')
16+
.then(response => {
17+
console.log(response);
18+
return response.json();
19+
})
20+
.then(todos => this.setState({ todos: todos }))
21+
.catch(e => console.log(e));
22+
}
23+
624
render() {
25+
console.log('todos', this.state.todos);
726
return (
827
<div className="App">
928
<div className="App-header">
@@ -13,6 +32,14 @@ class App extends Component {
1332
<p className="App-intro">
1433
To get started, edit <code>src/App.js</code> and save to reload.
1534
</p>
35+
<div>
36+
<h1>todos</h1>
37+
<ol>
38+
{this.state.todos.map(todo => (
39+
<li key={todo.id}>{todo.text}</li>
40+
))}
41+
</ol>
42+
</div>
1643
</div>
1744
);
1845
}

0 commit comments

Comments
 (0)