이제 nodejs에 로컬에서 실행하는 DB로 MYsql을 연결해보겠다.
먼저 nodejs mysql을 연결해주는 라이브러리를 설치해준다
npm install -s mysql
이제 아래코드로 DB에 시험해볼 간단한 테이블을 생성한다.
CREATE DATABASE login_lecture;
CREATE TABLE users(
id varchar(30) NOT NULL,
name varchar(30) NOT NULL,
psword varchar(30) NOT NULL,
in_date datetime DEFAULT current_timestamp,
PRIMARY KEY (id)
);
INSERT INTO users(id,name,psword)
values("lls","김철수","123"),
("asd","김강원","123"),
("ees","박영희","1234"),
("abv","홍재민","1w3"),
("ewq","벡흐석","12e");
나는 회원가입에 쓰기 때문에 간단한 회원정보의 테이블을 넣었다
본인은 윈도우 프롬포트에서 했고, DB관리 툴 아무거나 써도 무방하다
코드를 입력해 다음과 같이 나오면 잘 들어간 것이다.
use login_lecture;
desc users;
select * from users;
이제 nodejs로 돌아와서 db.js파일을 만들어준다.
const mysql = require("mysql");
const db = mysql.createConnection({
host:"localhost",
user: "root", // mysql에 아이디를 넣는다.
password: "work", // mysql의 비밀번호를 넣는다.
database: "login_lecture", //위에서 만든 데이터베이스의 이름을 넣는다.
});
db.connect();
db.query("SELECT * FROM users",(err,data)=>{
if(err)throw err;
console.log("====from start db.js====");
console.log(data[0]);
console.log("====from start db.js====");
});
module.exports =db;
create connection안에 host,user,pasword는 각자 설정한 값을 집어넣어야 한다.
디버깅 해보면 잘 연결되어 쿼리요청에 응답해준것을 알수있다.
이제 연결된 db객체를 다른 js파일에서 사용해보자
module.exports = db 구문으로 인해 다른폴더에서 require할수있다.
test.js 파일을 다음과 같이 작성해준다
const db = require('./config/db');
const id = "asd";
db.query( "SELECT * FROM users where id = ?;",[id],(err,data)=>{
if(err) throw reject(`${err}`);
console.log(data);
} );
이떄 require 할 db의 객체의 위치를 잘 작성해야한다.
이 프로젝트는 db.js가 config폴더에 있어 ./config/db로 경로를 설정했다.
정상적으로 동작하면 다음과같이 출력된다.
이제 프로젝트에서 어떤식으로 적용되었는지 살펴보고 마치겠다.
login() 함수가 실행되면 사용자의 입력 id,pwd가 담긴 client 변수가 생성되고 이를 DB에 존재하는지 비교하기 위해
UserStroage.getUserInfo() 메소드의 파라미터로 전달된다.
그러면 user.storage에서 방금 본것처럼 외부에서 export된 db객체로 쿼리문을 보낸다.
쿼리는 파라미터로 전달된 id와 동일한 id의 users 정보를 받아온다는 의미이고
쿼리가 잘 실행되면 해당 출력을 응답으로 보내고 실패시 error정보를 응답으로 보낸다.
그렇게 응답으로 온 데이터를 id,psword,in_date변수에 넣는다.
id 가 존재하고, 비밀번호가 같다면 로그인성공
id 가 존재하지만, 비밀번호가 다르다면 로그인실패후 메세지를 보내준다.
존재하는 아이디인 lls에 다른 비밀번호를 넣으면 이렇게 실패하고, 성공시 메인 페이지로 돌아오는것을 확인할수 있다.
'nodejs' 카테고리의 다른 글
[nodejs express] render와 redirect의 차이 (0) | 2023.07.20 |
---|---|
[nodejs MVC 로그인기능] 13. MVC패턴 model 분리 (0) | 2023.07.14 |
[nodejs MVC 로그인기능] 12. 로그인 인증 기능 구현 (0) | 2023.07.14 |
[nodejs MVC 로그인기능] 11. fetch,bodyparser를 이용해 입력 데이터 서버로 보내기 (0) | 2023.07.14 |
[nodejs MVC 로그인기능] 10. Dom으로 Html 객체 제어 (0) | 2023.07.14 |