[실습_47] Sequelize

sese·2022년 8월 10일

새싹

목록 보기
14/39

실습_46을 sequelize를 이용해 구현해보기

기본적인 Sequelize 사용법 및 코드 설명은 Sequelize 사용하기 를 참고해주세요.

mysql 을 사용한 것을 sequelize 로 바꿔주기 위해 controller 부분과 model 부분만 바꿔주었다. 대신 이 경우 mysql 을 사용했을 때와 같은 형태의 데이터를 controller 에서 프론트로 보내주어야 한다.

1. 모델 (테이블) 정의하기 - model (User.js)

테이블은 다음과 같은 구조로 되어있다.

const User = (Sequelize, DataTypes) => {

    const model = Sequelize.define(
        'user',
        {
            name: {
                type: DataTypes.STRING(20),
                allowNull: false
            },
            id : {
                type: DataTypes.STRING(10),
                allowNull: false,
                primaryKey: true
            },
            pw: {
                type: DataTypes.STRING(10),
                allowNull: false
            },
            email: {
                type: DataTypes.STRING(20)
            }
        },
        {
            timestamps: false,
            tableName: 'user',
            freezeTableName: true
        }
    );
    return model;
}

module.exports = User;

2. User model을 db 객체에 추가해주었다. - model (index.js)

const Sequelize = require("sequelize");
const config = require("../config/config.json")["development"];

const db = {};

const sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    config
);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

db.Visitor = require("./Visitor")(sequelize, Sequelize);
// 이 부분이 추가되었다.
db.User = require("./User")(sequelize, Sequelize);

module.exports = db;

3. 회원가입 - controller (UserController.js)

controller 부분을 바꿔주면 된다. mysql 을 사용했을 때는 모델에서 sql 문을 작성해 결과를 가져왔지만, sequelize 를 이용하면 controller 부분에서 sequelize 문법으로 데이터베이스를 조작할 수 있다.

// mysql 이용
exports.register = (req, res) => {
    User.register(req.body, function(result) {
        console.log(result);
        res.send("성공적으로 회원가입 되었습니다. 가입하신 정보로 로그인해주세요.");
    });
}

// sequelize 이용
exports.register = (req, res) => {
    let object = {
        name : req.body.name,
        id: req.body.id,
        pw: req.body.pw,
        email: req.body.email
    }
    models.User.create(object)
    .then((result) => {
        console.log(result);
        res.send("성공적으로 회원가입 되었습니다. 가입하신 정보로 로그인해주세요.");
    })
}

4. 로그인 - controller (UserController.js)

// mysql 이용
exports.login = (req, res) => {
    User.login(req.body, function(result) {
        console.log(result);
        if (result.length == 0) {
            res.send(false);
        } else {
            res.send(true);
        }
    });
}
  
// sequelize 이용
exports.login = (req, res) => {
    models.User.findOne({
        where: {id: req.body.id, pw: req.body.pw}
    }).then((result) => {
        console.log(result);
        if (result == null) {
            res.send(false);
        } else {
            res.send(true);
        }
    })
}

5. 프로필 페이지에 유저 정보 가져오기 - controller (UserController.js)

// mysql 이용
exports.profile = (req, res) => {
    User.get_user(req.body, function(result) {
        console.log(result);
        res.render("profile", {data: result[0]});
    });
}

  
// sequelize 이용
exports.profile = (req, res) => {
    models.User.findOne({
        where: {id: req.body.id}
    }).then((result) => {
        console.log(result);
        res.render("profile", {data: result});
    })
}

6. 회원정보 수정 - controller (UserController.js)

// mysql 이용
exports.edit = (req, res) => {
    User.update(req.body, function(result) {
        console.log(result);
        res.send("회원정보가 수정 되었습니다.");
    });
}

  
// sequelize 이용
exports.edit = (req, res) => {
    let newObj = {
        name : req.body.name,
        pw: req.body.pw,
        email: req.body.email
    }
    models.User.update(newObj, {where: {id: req.body.id}})
    .then((result) => {
        console.log(result);
        res.send("회원정보가 수정 되었습니다.");
    })
}

7. 회원 탈퇴 - controller (UserController.js)

// mysql 이용
exports.delete = (req, res) => {
    User.delete(req.body, function(result) {
        console.log(result);
        res.send("회원 탈퇴되었습니다.");
    });
}

  
// sequelize 이용
exports.delete = (req, res) => {
    models.User.destroy({where: {id: req.body.id}})
    .then((result) => {
        console.log("delete : ", result );
        res.send("성공적으로 탈퇴되었습니다.");
    })
}

완성 코드   👈🏻   깃허브

profile
예전 글은 다크모드로 봐야 잘 보일 수도 있습니다.

0개의 댓글