express 구성
routes라는 폴더를 만들고 라우터를 연결해주었다.
const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
const dotenv = require('dotenv');
const app = express();
dotenv.config();
app.set('port', 8080);
app.use(
cors({
origin: '*',
})
);
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트로 서버 ON');
});
const defaultRouter = require('./routes/index');
const signupRouter = require('./routes/signup');
app.use('/', defaultRouter);
app.use('/signup', signupRouter);
cors를 통해 CORS 문제를 해결해주었고, req.body를 읽기 위해 express.unlencoded, express.json를 사용해주었다.
참고한 블로그
https://velog.io/@jiseong/Node-Express-req.body
[Node] Express req.body
express를 사용하면서 특별한 설정없이 클라이언트 요청의 body값을 읽으면 undefined값이 나오게 된다.Express의 공식문서에서 찾아보니 req.body의 기본 값으로 undefined로 설정되어 있기 때문에 express.jso
velog.io
SQL문 처리
SQL문을 따로 관리해주자.
connect를 통해 MySQL에 접속한다.
mysql2 npm 라이브러리를 통해 접속한다.
mysql 라이브러리도 있는데 이걸로 접속했더니 접속이 제대로 되지않아서 mysql2를 사용해주었다.
이 원인은 MySQL8부터 기본 인증 프로토콜이 caching_sha2_password로 변경되어서 이다.
https://calvinjmkim.tistory.com/53
Node.js에서 MySQL 연동 실패 해결 (MySQL 8)
너무나 잘 돌아가던 Node.js 서버 코드를 다시 돌리던 중에 황당하게도 아예 연결이 되지 않는 현상이 나타났다. 당황해서 로그를 확인하니 다음과 같은 에러가 나고 있었다. Error: ER_NOT_SUPPORTED_AUTH
calvinjmkim.tistory.com
const mysql = require('mysql2/promise');
const connectInfo = {
host: 'localhost',
port: '3306',
user: process.env.USER,
password: process.env.PASSWORD,
database: 'user',
};
const connectMySQL = async () => {
const connect = await mysql.createConnection(connectInfo);
connect.connect();
return connect;
};
module.exports = connectMySQL;
이런식으로 DB를 연결해둔다. userid와 password는 .env를 통해 관리해주었다.
테이블 만들기
이렇게 설계해주었다.
쿼리문 사용예시
아래와 같이 사용하면된다.
const connectMySQL = require('./connect');
const connect = await connectMySQL();
const SQL = `SELECT * from login_table`;
const [rows] = await connect.execute(SQL);
이러면 rows에 결과가 담기게 된다.