-
React - Nodejs 연결React & Node.js 2020. 4. 29. 16:31
이전까지 개발한 프론트엔드와 서로 데이터를 주고 받을수 있는 API역할을 수행하는 Node.JS 구축 후 React와 연결한다.
Client 설정
client > App.js
이전까지 개발한 프론트엔드와 서로 데이터를 주고 받을수 있는 API역할을 수행하는 Node.JS를 구축한다.
import React, { Component } from 'react'; import './App.css'; import Customer from './components/Customer.js'; import Table from '@material-ui/core/Table'; import Paper from '@material-ui/core/Paper'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; import TableCell from '@material-ui/core/TableCell'; import TableBody from '@material-ui/core/Tablebody'; import { withStyles } from '@material-ui/core/styles'; const styles = theme => ({ root: { width: '100%', marginTop: theme.spacing(3), overflowX: "auto" }, Table: { minWidth: 1080 //이렇게 해야 1080이하에서 가로스크롤바가 생긴다. } }) class App extends Component { state = { customers: "" } componentDidMount() { this.callApi() .then(res => this.setState({customers: res})) //받은 변수 이름이 res라는 이름으로 바뀜, customers에 res값을 넣어줌 .catch(err => console.log(err)); } callApi = async () => { const response = await fetch('/api/customers'); const body = await response.json(); return body; } render() { const { classes } = this.props; //위에서 정의한 스타일이 적용될수 있게함 return ( <Paper className={classes.root}> <Table className={classes.Table}> <TableHead> <TableRow> <TableCell>번호</TableCell> <TableCell>이미지</TableCell> <TableCell>이름</TableCell> <TableCell>생년월일</TableCell> <TableCell>성별</TableCell> <TableCell>직업</TableCell> </TableRow> </TableHead> <TableBody> {this.state.customers ? this.state.customers.map(c => { //c에는 customer이다. 예를들어 홍길동, 예준석, 박지영 처럼 return ( <Customer id={c.id} image={c.image} name = {c.name} birthday = {c.birthday} gender = {c.gender} job = {c.job} /> ) }): "" } </TableBody> </Table> </Paper> ); } } export default withStyles(styles)(App);
Proxy 설정
client는 3000포트이고 server는 5000포트이다. 둘을 연결해 줘야 한다.
client > src > setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware') module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://localhost:5000', changeOrigin: true, }) ); };
Server 설정
const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const port = process.env.PORT || 5000; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.get('/api/customers', (req, res) => { res.send([ { 'id': 1, 'image': 'https://placeimg.com/64/64/1', 'name': '홍길동', 'birthday': '12345', 'gender': '남자', 'job': '대학생' }, { 'id': 2, 'image': 'https://placeimg.com/64/64/4', 'name': '이순진', 'birthday': '999999', 'gender': '남자', 'job': '대학생' }, { 'id': 3, 'image': 'https://placeimg.com/64/64/3', 'name': '유관순', 'birthday': '111111', 'gender': '여자', 'job': '대학생' } ]); }); app.listen(port, ()=>console.log(`Listening on port ${port}`));
'React & Node.js' 카테고리의 다른 글
[React] 웹사이트 꾸미기: Material UI (0) 2020.04.29 [React] 고객 컴포넌트를 분리하여 다수의 고객 정보 보여주기 (0) 2020.04.29