Wecode - Project 2 (부트캠프)/Project 2 과정

Project 2 - 5일 차 (9) : 내가 push 한 '로그인 함수' : pull request 팀원 리뷰 + 수정

JBS 12 2023. 9. 22. 19:35

올리고 몇 분 사이 바로 올라오는,

팀원분의 빠른 피드백 좋다


추석 연휴 전 일단, commit, push 하는 게 좋겠다 싶어서 

올려놓고 보느라 

수정 사항이 좀 있지만. 

 

과정에서 배우는 게 중요하니까. 

 

 

나의 코드와 보면서 비교해보기

 

이 부분이 models/ dataSource.js에 들어가 있군

(추후 layeredpattern 시에)

 

port 변수 안 해도 도 ㅣ나? 

 


수정 중에 깨달은 사실,

 

pull request 에 이렇게 

어떤 파일의 몇번째 줄이라고 나오니, 

 

수정할 때 해당부분을 하나하나 찾지 않아도 돼서 편리하군! 


수정 후 코드 

const express = require('express');
const morgan = require('morgan');
const cors = require('cors');

require('dotenv').config();

const app = express();

app.set('port', process.env.PORT || 8000);
app.use(cors());
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));


//로그인
app.post('/login', async (req, res) => {
try {
const email = req.body.email;
const password = req.body.password;

// key error
if (!email || !password) {
const error = new Error('필수 입력란을 모두 작성해 주세요');
error.statusCode = 400;
throw error;
}
// key error 할 수 있지만, 프론트엔드에게 백엔드의 의도를 '친절하게' 알려주기 위해

// email 이 DB에 있는지 (existing user인지)
const existingUser = await myDataSource.query(`
SELECT id, email, password FROM users WHERE email='${email}';
`);

if (existingUser.length === 0) {
const error = new Error('일치하는 회원정보가 없습니다');
error.statusCode = 400;
throw error;
}

// 해당 email의 해쉬된 패스워드가 DB에 있는가
const hashPw = await bcrypt.compare(password, existingUser[0].password);
console.log(hashPw);


if (!hashPw) {
const error = new Error('일치하는 회원정보가 없습니다');
error.statusCode = 400;
error.code = 'passwordError';
throw error;
} //보안을 위해 비밀번호, 패스워드 중 오류 알려주지 않기로

// 로그인 성공 시 토큰 발급
const token = jwt.sign({ id: existingUser[0].id }, process.env.TYPEORM_JWT);
return res.status(200).json({
message: '로그인 성공하였습니다',
accessToken: token,
});
} catch (error) {
console.log(error);
}
});

const server = http.createServer(app);
const start = async () => {
try {
server.listen(8000, () => console.log(`Server is listening on 8000`));
} catch (err) {
console.error(err);
}
};

app.use((req, _, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error);
});

app.use((err, _, res, next) => {
res.status(err.status || 500);
return res.json({
error: `${err.status ? err.status : ''} ${err.message}`,
});
});

app.listen(app.get('port'), () => {
console.log(`listening.... 🦻http://localhost:${app.get('port')}`);
});