1. 기존에 src > databases > user.json파일에 저장했던 회원가입 정보들을 삭제하고, db와 연결할 파일 생성하기
-src > config 폴더 생성 > config 폴더 내에 db.js 파일 생성

// db.js
const mysql = require("mysql");
const db = mysql.createConnection({
host: "AWS RDS에 만든 데이터베이스의 엔드포인트 복사하여 붙여넣기",
user: "데이터베이스 생성 시 설정했던 유저 이름",
password: "데이터베이스 생성 시 설정했던 비밀번호",
database: "데이터베이스 생성 시 설정했던 데이터베이스 이름"
});
db.connect();
module.exports = db;
2. UserStorage.js 파일에서 로그인과 회원가입을 json 파일로부터 file system을 통해 받아오던 것을 db와 연결하기
// UserStorage.js
const db = require("../config/db");
class UserStorage{
static getUserInfo(id) {
return new Promise((resolve, reject) => { // 성공 시 resolve, 실패 시 reject 반환
const query = "SELECT * FROM users WHERE id = ?;"; // 로그인 시행 시 db로부터 로그인 정보를 불러올 쿼리문 작성
db.query(query, [id], (err, data) => { // 쿼리문에서 ?안에 들어갈 정보를 [id]로 설정
if (err) reject(`${err}`); // error가 [Object ocject]로만 뜨지 않고 문자열로 뜰 수 있도록 처리
resolve(data[0]);
// 로그인에서 id = id인 것이 있다면 성공한 것으로, data를 불러오는데, data가 [{id:~, name:~, psword:~}]형식이므로 첫번째 것만 불러올 수 있도록 data[0]으로 처리
});
});
}
static async save(userInfo) {
return new Promise((resolve, reject) => { // 성공 시 resolve, 실패 시 reject 반환
const query = "INSERT INTO users(id, name, psword) VALUES(?, ?, ?);";
// 회원가입은 회원가입 창에서 입력한 id, name, psword를 받아서 users 테이블에 INSERT하는 것으로 처리
db.query(query, [userInfo.id, userInfo.name, userInfo.psword], (err) => {
if (err) reject(`${err}`);
resolve({ success: true });
// 성공하면 따로 보낼 데이터는 없고 msg만 { success: true }로 전달
});
});
}
moduel.exports = UserStorage;
3. User.js파일에서 login에 대한 동작을 try, catch문으로 변경
// User.js
class User{
...
async login() {
const client = this.body;
try {
const {id, psword } = await UserStorage.getUserInfo(client.id);
if (id) {
if (id === client.id && psword === client.psword) {
return { success: true };
}
return { success: false, msg: "비밀번호가 틀렸습니다." };
}
return { success: false, msg: "존재하지 않은 아이디입니다." };
} catch(err) {
return { success: false, msg: err };
}
}
...
}
4. 결과
- 회원가입

- 정보 입력 후 SIGN UP 클릭 시 데이터베이스에 해당 정보가 저장됨

- 로그인

- 새로 회원가입했던 id와 비밀번호로 로그인을 시도하면 성공

- 로그인 성공 시 이동하도록 지정한 루트 페이지로 이동함
'back-end > Javascript' 카테고리의 다른 글
[Node.js] curl 명령어와 API테스트 도구(POSTMAN) (1) | 2022.12.23 |
---|---|
[Node.js] 파일DB로 회원가입 구현 (0) | 2022.12.12 |
[Node.js] 파일DB로 로그인 구현 (0) | 2022.12.12 |
[Node.js] 회원가입 페이지 요청 구현 (0) | 2022.12.06 |
[Node.js] 로그인 모델 구현 (0) | 2022.12.01 |