8-2 http-status-codes 모듈, controller, password
ex)
const { StatusCodes } = require('http-status-codes');
~
conn.query(sql, values,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
res.status(StatusCodes.CREATED).json(results);
})
sql문 실행과, values값에 이상이 있는 경우 err 처리를 하면서, 클라이언트의 잘못된 요청res.status(400)를 대신하여 StatusCodes.BAD_REQEUST 처럼 작성하여 코드의 가독성과, 보수성을 높일 수 있습니다.
res.status(200)도 SatusCodes.CREATED로 작성
app.js : 프로젝트의 메인 라우터 역할
/routes
/users.js : 하위 라우터 역할
/books.js : 하위 라우터 역할
...
해결방법
요약없이 설명하면 : users.js에 라우터와 그 경로에 대한 기능까지 구현이 되어있는 것을, users.js는 라우팅만 해주고 각 경로에 대한 기능들은 UserContoller.js라는 별도의 파일을 만들어서 해당 파일에 기능을 구현한 뒤 모듈화 하여 users.js에 가져와서 콜백함수부분으로 연결해서 사용합니다.
= user.js의 콜백함수 부분을 UserController.js로 옮기고 모듈화, user.js에서 가져와서 사용
ex)
기존에 아래와 같이 users.js에서 login 경로에 대한 라우팅과 기능을 같이 구현 한 것을
router.post('/login', (req, res) => {
const { email, password } = req.body;
let sql = 'SELECT * FROM users WHERE email = ?';
~
~
}
==================
<users.js>
UserController.js에서 모듈화 하여 가져오고
const { join, login} = require('../controller/UserController')
/login 경로에 대한 것은 login 콜백함수로 대체
router.post('/login', login);
그 login에 대한 기능은 UserContoller.js에서 구현
===================
<UserController.js>
const login = (req, res) => {
const { email, password } = req.body;
let sql = 'SELECT * FROM users WHERE email = ?'; // 이메일 확인
conn.query(sql, email,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
~
~
module.exports = { join, login }
const crypto = require('crypto')
const salt = crypto.randomBytes(64).toString('base64');
const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('base64');
randomBytes(64)
toString('base64)
pbkdf2Sync
기타 : 왜 salt인가?
기타 : 길이 조절은?
사용
ex)