1. Express 서버에 라우팅 설정
const express = require('express');
const path = require('path');
const os = require("os");
const app = express();
const PORT = process.env.PORT || 4000;
app.use(express.static(path.join(__dirname, '..', 'public/')));
// if you need api routes add them here
app.get("/api/getUsername", function(req, res, next){
res.send({ username: os.userInfo().username });
});
app.listen(PORT, () => {
console.log(`Check out the app at http://localhost:${PORT}`);
});
코드를 보면 10줄 정도로 서버가 작동하고 있습니다.
제가 만들고자 하는 Web App 뿐만 아니라 대부분의 Web App은 DB연동이 필수로 되어있으며 REST API Server의 역할을 하기 위해선 여러 요청에대한 처리를 해야하기에 하나의 Javascript 파일에서 모든 요청에 대해 처리하는 코드를 작성하게되면 가독성이 떨어질 뿐더러 유지보수하기에 어려운 점이 있습니다.
따라서, 라우터기능을 이용하여 RESTful Server를 구축해보도록 하겠습니다.
server 폴더에 routes 폴더를 만들고 그안에 router.js 파일을 만든 후 아래 코드를 입력합니다.
const express = require('express');
const os = require('os');
const router = express.Router();
/* GET home page. */
router.get('/api/getUsername', (req, res, next) => {
res.send({ username: os.userInfo().username });
});
module.exports = router;
그런 다음 server.js 파일을 아래와 같이 변경합니다.
const express = require('express');
const path = require('path');
const router = require('./routes/router');
const app = express();
const PORT = process.env.PORT || 4000;
app.use(express.static(path.join(__dirname, '..', 'public/')));
app.use('/', router);
app.listen(PORT, () => {
console.log(`Check out the app at http://localhost:${PORT}`);
});
app.use('/', router); 부분을 보게되면, '/'로 시작되는 모든 url 요청을 router.js로 넘겨주겠다는 의미입니다. 따라서 모든 요청에 대한 get, post 함수를 router.js 파일에서 관리하면 됩니다.
2. DB 연결하기
DB로 저는 mysql 아니면 mongodb를 주로 사용합니다. 우선 MySQL 연동을 먼저 해보도록 하겠습니다.
server 폴더에 dbconnection.js 파일을 생성합니다.
const mysql = require('mysql');
const connection = mysql.createPool({
host: 'DB Adress',
port: 3360,
user: 'user',
password: 'password',
database: 'database'
});
module.exports=connection;
각각 항목에 맞는 값들을 자신의 DB 설정에 맞게 입력해주시면 됩니다.
그런다음 package.json에 mysql을 추가합니다.
yarn add mysql
다시 server/routes/router.js 파일을 열고 쿼리를 날려 데이터를 받아오는 api를 작성해봅니다.
const express = require('express');
const os = require('os');
const router = express.Router();
const db = require('../dbconnection');
/* GET home page. */
router.get('/api/getUsername', (req, res, next) => {
res.send({ username: os.userInfo().username });
});
router.get('/getData', (req, res) => {
db.query("select * from table", (err, rows) => {
if (!err) {
res.send(rows);
} else {
console.log(`query error : ${err}`);
// res.send(err);
res.send(err);
}
});
});
module.exports = router;
const db = require('../dbconnection') 을 통해 설정한 DB 정보를 불러오고 해당 정보를 토대로 쿼리를 날립니다.
Express 서버를 재시작하여 DB에 잘 연결되었고 데이터를 잘 가져오는지 확인해 봅니다.
localhost:4000/getData 를 입력하였을때 데이터 리스트가 보이면 제대로 설정이 된 것입니다.