Express, MySQL 로 SNS 만들기
NodeJS와 Mongoose를 이용해 1인 미니프로젝트를 진행한 경험이 있다.
NodeJS에 대한 기본기도 다지고, SQL을 다뤄보고 싶어서 'Node.js 교과서 개정 3판' 을 참고하였다.
포스팅 내용으로는 9장에 나오는 내용을 직접 따라해보며 발견한 2건의 Error에 관한 것이다.
https://github.com/nicesugi/study-nodeJS/tree/main/practice-sns
1. '9.3.1 로컬 로그인 구현하기' 에서의 SequelizeValidationError 발생
저자는 처음 User 모델 생성시 provider를 'local', 'kakao'를 선택 & null을 허용하지 않는 옵션을 달아놓았다.
하지만 회원가입 함수에서 User 생성시 provider를 기재하지 않아 ValidationError가 발생된다.
SequelizeValidationError: notNull Violation: User.provider cannot be null
-> 간단하게 User 생성시 provider: 'local' 값을 추가해주어 해결할 수 있다.
2. '9.3.2 카카오 로그인 구현하기'에서의 SequelizeDatabaseError 발생
저자는 처음 User 모델 생성시 password값에 null을 허용하지 않는다.
즉 필수값이란 말인데, 새로운 User를 생성하는 함수에서는 password를 작성해주지 않아서 Error가 발생된다.
name: 'SequelizeDatabaseError',
parent: Error: Field 'password' doesn't have a default value
-> 에러만 없애고자 일차원적으로 진행해보았다.
1. User 모델파일에서 User password 필드의 옵션을 변경 혹은 추가해야 했다.
1-1. allowNull : false 을 true 로 변경
1-2. defaultValue: 'default-password' 추가
2. 1-1의 방법을 선택했고, User model이 변동되었으니 데이터베이스에 적용되지 않은 migration이 있는지 확인
2-1. migration 파일이 없어서 새로 생성
npx sequelize-cli migration:generate --name <migration-name>
2-2. 마이그레이션 파일 내 데이터베이스 스키마를 변경하기 위한 'up'함수를 수정해줌
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.changeColumn('Users', 'password', {
type: Sequelize.STRING(100),
allowNull: true,
});
},
async down(queryInterface, Sequelize) {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
},
};
2-3. migration 실행
npx sequelize-cli db:migrate
3. 9장을 마무리하고
내가 사용한 방법은 password 보안이 아주 매우 취약해진다.
예시로 회원 가입시 비밀번호가 없더라도 회원가입이 되는 상황이 발생한다.
이거에 대해서는 보안을 위해서 환경 변수를 통해 패스워드 기본값을 관리하던, 로직을 추가하던, 생각을 해보면 좋을 것 같다.
보안을 거치고서
깃헙 리드미에 트러블슈팅으로 적을까,, contribute를 해볼까,, 생각중이다
'STUDY > JavaScript || NodeJS' 카테고리의 다른 글
navigator.mediaDevices.getUserMedia() | 오디오/비디오 제어 (0) | 2023.08.04 |
---|---|
바닐라 자바스크립트로 심플한 앱 만들기 | 깃헙.io (0) | 2023.07.24 |
이벤트 핸들러 호출 방식 | 함수 사용, 객체 사용 (0) | 2023.07.14 |
Sequelize를 사용해 Express와 MySQL을 연결 | Sequelize | 관계 정의 (0) | 2023.06.29 |