Sequelize、Sequelize-cli、MVCの使用


Sequelize


:Sequelizeは、sql構文を使用せずにデータベースを使用できるORMです.
(ORMでは、sql構文を使用せずにデータベースを使用できます.)
ORM=>>オブジェクト関係マッピング、オブジェクト-関係マッピングの略.

Sequelizeを学ぶ前に

npm install mysqlでmysqlモジュールを使用してJavaScriptに接続する必要があります.
1. db/index.js는 데이터베이스와 연결하는 작업을 한다.
2. models/index.js은 SQL 문법을 활용하여 데이터베이스와의 CRUD을 담당한다.
3. controllers/index.js는 models/index.js을 불러와 models을 사용해서 웹서버가 요청 및
응답을 하기위해 필요한 함수에 연결하여 사용하면서 웹서버와 데이터베이스간의 연결을 도와준다.

이렇게 디렉토리별로, 파일별로 역활을 나눠서 하는 소프트웨어기법을 MVC라고 한다.

MVC(Model View Controller)

쉽게 식당에 비유하자면,

Model은 재료창고
Controller는 재료창고에서 음식을 꺼내 요리를 하는 곳
View는 요리된 음식을 

// db/index.js
const mysql = require('mysql');

const con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: process.env.패스워드가 저장된 환경변수이름,
    database: '데이터베이스이름'
  });

moduel.exports = con;
// models/index.js
const db = require("../db");

moduel.exports = {
    get: (callback) => {
    		const queryString = `SELECT * FROM 테이블이름`;
      		db.query(queryString, (error, result) => {
        	callback(error, result);
        }
    },
    post: (value1, value2,callback) => {
    	const queryString = `
		INSERT INTO 테이블이름(column1, column2) VALUSE(?, ?)
		`;
        const params = [value1, value2];
       	
        db.queryString(queryString, [params], (error, result) => {
        	callback(error, result);
        })
    }
}
controllers/index.js
const models = require('../models');

moduel.exports = {
   get: (req, res) =>{
    	models.get((error, result)=>{
            if(error){
            	return res.send(200).json(result);
            }
        })
    },
   post: (req, res) => {
   	models.post(req,query.value1,
                    req,query.value2,
                    (error, result)=>{
      			if(error) return res.sendStatus(500);
   	   		return res.send(201).json(result);
   	})
   }
}

Sequeizeを勉強してから


:sql構文を使用する必要はありません.
1. npm install --save sequelize
2. npm install --save-dev sequelize-cli
3.ORM設定
:プロジェクトの初期フェーズを自動的に設定するのに役立つsequelize-cliでブートし、ORMをよりよく使用できます.npx sequelize-cli init起動すると、次のフォルダとファイルが作成されます.
config/config.json
models/
migrations/
seeders/
4.モデルの作成
モデルは、エンティティをオブジェクトとして表し、データ構造を記述し、データに対して実行可能なコマンドの集合である.
エンティティとは、一意のid値を有し、他の属性が変更されても区別できるオブジェクトを指す.
エンティティでないオブジェクトが他のプロパティを変更した場合、そのオブジェクトが以前のオブジェクトと同じかどうかは区別できません.
とにかく.npx sequelize-cli model:generate --name 모델이름적는란 --attributes 칼럼이름:sequelize데이터타입에 맞게 작성,lastName:string,email:stringまた、sequelizeで使用するためにデータベースを移行する必要があります.npx sequelize-cli db:migrate5.次のモデルの作成が完了すると、migrationsフォルダとモデルフォルダに次のファイルが作成されます.
models/모델이름.js
migrations/20201026082504-create-모델이름.js
models/모델이름.jsはモデル/インデックスです.jsの最終moduel.エクスポート時にオブジェクトとしてエクスポートし、使用するモデルを作成します.

モデルがうまく作成されている場合は、MVCに基づいてディレクトリを分割して操作します。

Models <<== npx sequelize-cli init 명령어를 사용하면 자동생성됌
View <<== View는 express로 routing하는 것을 말함
Controllers <<== express로 routing을 할때 필요한 미들웨어 함수들을 구현
		 해 놓는 곳으로 Models에서 Sequelize의 인스턴스를 불러와
         	 데이터베이스와 연결하여 사용한다.

コントローラ作成方法


models/index.jsはmoduelコンソールで出口を撮影した内容は以下の通りです.

urlとuserは私自身がモデルを作成したモデル名です.
最初に現れたkeyurlの属性値urlはsequelize関数を使用できます
sequelize 함수
findAll()
findOne()
findOrCreate()
etc ...
従って、コントローラは、前述したように、モデルがデータベースからデータを取り出す限り、コントローラ内のView、Webサーバが配布できる関数をきれいに実現することができる.
では、controllerはモデルから低オブジェクトをこのようにインポートできます.
	// 구조분해
	const { url: URLModel } = require('../models');
	// require문법중 폴더명만 적게되면 그 해당 index.js나 index.node를
	// 찾고 없을시 오류를 낸다. 

	moduel.exports = {
post: (req, res) => {
    const { url } = req.body;

    if (!utils.isValidUrl(url)) {
      return res.sendStatus(400);
    }

    utils.getUrlTitle(url, (err, title) => {
      if (err) {
        console.log(err);
        return res.sendStatus(400);
      }

      URLModel
        .findOrCreate({
          where: {
            url: url
          },
          defaults: {
            title: title
          }
        })
        .then(([result, created]) => {
          if (!created) {
            return res.status(201).json(result); // find
          }
          res.status(201).json(result); // Created
        })
        .catch(error => {
          console.log(error);
          res.sendStatus(500); // Server error
        });
    });
  },
  redirect: (req, res) => {
    URLModel
      .findOne({
        where: {
          id: req.params.id
        }
      })
      .then(result => {
        if (result) {
          return result.update({
            visits: result.visits + 1
          });
        } else {
          res.sendStatus(204);
        }
      })
      .then(result => {
        res.redirect(result.url);
      })
      .catch(error => {
        console.log(error);
        res.sendStatus(500);
      });
  }
データベースを学ぶ前に、データを保存することができなくて、データを保存しながら開発することを考えると、私はとても興奮しています.よく復習して、よく勉強して、開発する時よく使います!

追加


アーキテクチャの変更があるたびに移行します.npx sequelize-cli db:migrate