반응형
mysql2 가 아닌 mysql 을 쓴 server.js 코드
const express = require('express');
const nunjucks = require('nunjucks');
const bodyParser = require('body-parser');
const tokenKey = require('./JWT');
const cryptoPW=require('./cryptoPW')
const auth = require('./middleware/auth');
const mysql = require('mysql')
const session=require('express-session');
const app = express();
nunjucks.configure('views', {
express: app,
})
app.set('view engine', 'html');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false, }))
app.use(express.static('public'));
app.use(session({
secret:'aa',
resave:true,
secure:false,
saveUninitialized:false,
}))
let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '5353',
database: 'user0530'
})
connection.connect();
app.get('/', (req, res) => {
res.render('index.html');
})
app.get('/user/join', (req, res) => {
res.render('join.html');
})
app.post('/user/join_success', (req, res) => {
let { userid, userpw, username } = req.body;
let cryptoUserpw = cryptoPW(userpw);
//db에 넣기
let sql = `insert into user (userid,userpw,username) values ('${userid}', '${cryptoUserpw}','${username}')`;
connection.query(sql, (error, results) => {
if (error) {
console.log(error)
} else {
console.log(results);
}
});
res.redirect('/');
})
app.post('/auth/local/login', (req, res) => {
let { userid, userpw } = req.body;
let result = {
result: false,
msg: '아이디와 비밀번호를 확인해주세요.'
};
let sql = `select * from user where userid='${userid}'`;
connection.query(sql, (error, results) => {
if (error || results=='') {
console.log(error);
} else {
let DB_userid = results[0].userid; // db
let DB_userpw = results[0].userpw; // db
let cryptoUserpw = cryptoPW(userpw); //고객이 입력한pw 암호화
if (userid == DB_userid && cryptoUserpw == DB_userpw) {
let token = tokenKey(userid);
res.cookie('accessToken', token, { httpOnly: true, secure: true, });
result = {
result: true,
msg: '로그인 성공'
}
}
}
req.session.userid = userid;
res.json(result)
})
})
app.get('/user/info', auth, (req, res) => {
let userid = req.userid;
res.send(`${userid}님의 회원정보는 아래와 같습니다.`)
})
app.listen(3000, () => {
console.log('server start port:3000')
})
요 아래 부분에서
app.post('/auth/local/login', (req, res) => {
let { userid, userpw } = req.body;
let result = {
result: false,
msg: '아이디와 비밀번호를 확인해주세요.'
};
let sql = `select * from user where userid='${userid}'`;
connection.query(sql, (error, results) => {
if (error || results=='') {
console.log(error);
} else {
let DB_userid = results[0].userid; // db
let DB_userpw = results[0].userpw; // db
let cryptoUserpw = cryptoPW(userpw); //고객이 입력한pw 암호화
if (userid == DB_userid && cryptoUserpw == DB_userpw) {
let token = tokenKey(userid);
res.cookie('accessToken', token, { httpOnly: true, secure: true, });
result = {
result: true,
msg: '로그인 성공'
}
}
}
req.session.userid = userid;
res.json(result)
})
})
sql 명령으로 가져온 결과 results 가 동기식이다
let sql = `select * from user where userid='${userid}'`;
connection.query(sql, (error, results) => {
if (error || results=='') {
console.log(error);
} else {
let DB_userid = results[0].userid; // db /
let DB_userpw = results[0].userpw; // db
}
let cryptoUserpw = cryptoPW(userpw); //고객이 입력한pw 암호화
if (userid == DB_userid && cryptoUserpw == DB_userpw) {
let token = tokenKey(userid);
res.cookie('accessToken', token, { httpOnly: true, secure: true, });
result = {
result: true,
msg: '로그인 성공'
}
req.session.userid = userid;
res.json(result)
})
위의 코드처럼 let cryptoUserpw 부터 if 절 밖으로 뺴내고 싶었는데 이렇게 하면 DB_userid, DB_userpw 값이 undefined가 뜬다. connection 부분에 results 결과가 담기고 변수에 들어가야하는데 아래 코드가 먼저 실행기 때문같다.
비동기가 가능한 mysql2 를 사용해서 아래처럼 바꾸면 가능하다.
const mysql2 = require('mysql2/promise'); // 추가 1111
let mysqlInfo = {
host: 'localhost',
user: 'root',
password: '5353',
database: 'user0530'
}
let connection = mysql.createConnection(mysqlInfo)
let connection2 = mysql2.createConnection(mysqlInfo) // 추가 22222
app.post('/auth/local/login', async (req, res) => {
let { userid, userpw } = req.body;
let result = {
result: false,
msg: '아이디와 비밀번호를 확인해주세요.'
};
let sql = `select * from user where userid='${userid}'`;
let [DB_results] = await (await connection2).execute(sql); //수정 33333
// [] 없이 그냥 DB_results 하면 결과값에 [0][0] 두번 줘야함
let DB_userid = DB_results[0].userid; // db
let DB_userpw = DB_results[0].userpw; // db
let cryptoUserpw = createPW(userpw); //고객이 입력한pw 암호화
if (userid == DB_userid && cryptoUserpw == DB_userpw) {
let token = createToken(userid);
res.cookie('accessToken', token, { httpOnly: true, secure: true, });
result = {
result: true,
msg: '로그인 성공'
}
}
req.session.userid = userid;
res.json(result)
})
-
let [DB_results] = await (await connection2).execute(sql);
요 부분에서 connection 도 비동기로 이루어져야 해서 앞에 await을 붙인다.
반응형
'Javascript' 카테고리의 다른 글
[JavaScript] scrollHeight, ScrollTop, ClientHeight 차이 (0) | 2021.06.15 |
---|---|
[JavaScript 채팅창] div 스크롤 자동으로 내려가게 만드는 방법 (0) | 2021.06.15 |
[JavaScript] .crypto.createHmac 'sha256' 해시 알고리즘 암호화, 복호화 / 자바스크립트, node.js, JWT 토큰 (0) | 2021.05.31 |
[JavaScript] 구조 분해 할당 [...] {...} 비구조화 할당 문법이란? 예시 / 자바스크립트 (0) | 2021.05.26 |
질문 [JavaScript] 자바스크립트 Object.keys() 사용법, 예제 (0) | 2021.05.26 |