[NODE 강의] 데이터베이스 수정, 삭제

2021. 3. 19. 00:56Dev/Node

반응형

[클립명]

1. Moment.js

2. DB수정

3. DB삭제

DB 수정 (update)

sequelize에서의 DB update는 아래와 같이 처리한다. ( models.테이블명.update )

update 함수의 매개변수로 2개가 전달된다.

- 첫번째 : update할 칼럼명과 값

- 두번째: where절 조건

exports.post_products_edit = (req, res) => {
   //update
   models.Products.update(
   //update할 칼럼 정보
   {
    name:req.body.name,
    price:req.body.price,
    description:req.body.description
   },
   //where절 
   {
    where : { id : req.params.id}
   }).then(()=>{
    res.redirect('/admin/products/detail/' + req.params.id);
   });
}

sequelize update

 

DB 삭제 (delete)

sequelize에서의 DB delete는 아래와 같이 처리한다. ( models.테이블명.destroy )

destroy 함수의 매개변수로 where절 조건을 전달한다.

exports.get_products_delete = (req, res) => {
	//delete 처리
    models.Products.destroy(
    //where절
    {
        where : { id : req.params.id}
    }).then(()=>{
        res.redirect('/admin/products');
    })
}

간단한 정리

sequelize에 대해서 포스팅한 걸 정리해보자면 아래와 같다.

models.테이블명.create -----> insert

models.테이블명.findAll(조회조건) ------> select

models.테이블명.findByPk(primary key) ------> select

models.테이블명.findOne(조회조건) -----------> select

models.테이블명.update(데이터, 조회조건) ----> update

models.테이블명.destroy(삭제조건) ------------> delete

이 외에도 다양한 함수들이 있기 때문에, sequelize에 대한 별도 공부가 필요하다. (sequelize 공식 사이트)

 

 

Moment.js

자바스크립트에서 날짜를 다양한 형태로 편리하게 표현하기 위해 많이 쓰이는 라이브러리 moment.js 를 설치하여 적용해보자. 

//moment 패키지 설치
$ npm install moment

sequelize를 이용하여 모델을 생성하는 소스에서 moment 패키지를 로드하고, prototype으로 날짜를 원하는 포맷으로 변경하여 리턴해주는 함수를 작성한다.

//moment 로드
const moment = require('moment');

module.exports = (sequelize, DataTypes) => {
    const Products = sequelize.define('Products',
        {
            id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
            name : { type: DataTypes.STRING },
            price : { type: DataTypes.INTEGER },
            description : { type: DataTypes.TEXT }
        },
        // options
        {
            timestamps: true
        }
    );
	//Products 의 프로토타입으로 dateFormat 함수 생성
    Products.prototype.dateFormat = (date) => {
        //moment 라이브러리를 이용하여 원하는 포맷으로 날짜 리턴
        return moment(date).format('YYYY년 MM월 DD일');
    }
    return Products;
}

※ 프로토타입 함수 생성하는 부분에서 별도 로직이 없이 바로 값을 리턴하는 경우에는 아래와 같은 문법으로 작성해도 된다.

Products.prototype.dateFormat = (date) => (
	moment(date).format('YYYY년 MM월 DD일')
);

템플릿 html에서 prototype으로 만든 함수를 호출하여 날짜 포맷을 변경하여 화면에 출력한다.

{% set title = "관리자 리스트" %}
{% extends "layout/base.html" %}
 
{% block content -%}
    <table class="table table-bordered table-hover">
        <tr>
            <th>제목</th>
            <th>작성일</th>
            <th>삭제</th>
        </tr>
        {% for product in products %}
        <tr>
            <td>
                <a href="/admin/products/detail/{{product.id}}">
                {{ product.name }}
                </a>
            </td>
            <td>
                <!-- prototype 함수 호출 -->
                {{ product.dateFormat(product.createdAt) }}
            </td>
            <td>
                <a href="#" class="btn btn-danger">삭제</a>
            </td>
        </tr>
        {% endfor %}
    </table>

    <a href="/admin/products/write" class="btn btn-default">작성하기</a>

{% endblock %}

YYYY년 MM월 DD일 포맷으로 화면에 출력된다.

반응형