node.js - sequelize

22205 ワード

sequelize


💡 概要
sequelizeは、ノードでMySQLを簡単に使用できるライブラリです.JavaScript構文をsql文に変換するために使用します.
sequelizeをインストールして実行するとconfig、modelsなどのフォルダが生成されます.
configフォルダにはmysqlに関連付けられる情報が含まれています.jsonファイルを生成します.このファイルにデータベース名、ユーザー名、passwordなどのプロパティを作成する場合はmysqlにバインドするときに使用します.
最初のインデックスはmodelsフォルダにあります.jsファイルを生成します.(後述)
使用するデータベース・テーブルに関する情報は、このモデル・フォルダに作成する必要があります.mysqlのテーブルはsequelizeのモデルに対応します.(モデルフォルダにモデルを作成)
💡 modelsフォルダ-index.jsとモデルファイル
index.js
const Sequelize = require("sequelize");

**🔥 mysql db 연결에 필요한 정보들을 config.json 파일에서 불러온다**
const config = require("../config/config.json").development;

**🔥 models 폴더에 정의한 모델(테이블)을 불러온다**
const Info = require("./info");

**🔥 mysql sequelize 연결객체를 생성한다**
const **sequelize** = new Sequelize(config.database, config.username, config.password, config);

**🔥 db객체에 sequelize 연결객체와 모델을 등록한다**
const db = {};
db.sequelize = **sequelize**;
db.Info = Info;

**🔥 Info 모델에 sequelize 연결객체를 전달하여 init 함수를 실행한다**
Info.init(**sequelize**);
**🔥 Info 모델에 db객체를 전달하여 associate 함수를 실행한다**
Info.associate(db);

module.exports = db;
info.js
const Sequelize = require("sequelize");

module.exports = class Info extends Sequelize.Model {
		**🔥 1. init 함수 -> 테이블에 대한 설정을 한다**
    static init(**sequelize**) {
        return super.init(
						**🔥 1번째 인수: 테이블의 컬럼에 대한 설정**
            {
                tokenID: {
                    type: Sequelize.INTEGER,
                    allowNull: false,
                    primaryKey: true,
                    autoIncrement: true,
                },
                name: {
                    type: Sequelize.STRING(50),
                    allowNull: false,
                },
                image: {
                    type: Sequelize.STRING(150),
                    allowNull: false,
                },
            },
						**🔥 2번째 인수: 테이블 자체에 대한 설정**
            {
                **sequelize**,
                timestamps: false,
                underscored: false,
                modelName: "NFT_info",
                tableName: "nft_info",
                paranoid: false,
                charset: "utf8",
            }
        );
    }
		**🔥 2. associate 함수 -> 다른 모델(테이블)과의 관계를 작성**
    static associate(db) {
					db.Info.belongsTo(db.User, {foreignKey: 'tokenID', targetKey: 'id'})
		}
};
💡 ExpressアプリケーションをsequelizeでMySQLにバインド
app.js
const express = require("express");

**🔥 models의 index.js에서 export하는 db에 등록된 seqeulize(연결객체)를 불러온다**
const { **sequelize** } = require("./models");

const app = express();

**🔥 위에서 불러온 sequelize에 sync 메서드를 사용하여 서버 실행시 mysql과 연동되도록 만든다**
**sequelize**.sync({ force: false })
    .then(() => {
        console.log("db connected");
    })
    .catch(err => {
        console.error(err);
    });

app.listen(8000);
ここまでexpressとmysqlを接続するプロセスです.mysqlのdbテーブルからリソースを取得する場合は、ルータを作成してexpressアプリケーションに登録する必要があります.
ルータの作成
const express = require("express");
const router = express.Router();

**🔥 자원을 가져오고자 하는 모델을 불러온다**
const Info = require("../models/info");

// server에 request가 왔을때 하는 작업들
router.get("/", async (req, res, next) => {
    try {
        const nfts = await Info.findAll();
        console.log("hoooo");
        console.log(nfts);

        //res 작업을 해야 프론트에서 axios로 요청 보냈을때 얻는 response에 서버에서 보내준 정보가 담겨있다(?)
        res.json({ ok: true, data: nfts });
    } catch (err) {
        console.error(err);
        next(err);
    }
});

module.exports = router;
ルータの登録
const express = require("express");
const { sequelize } = require("./models");
const app = express();

sequelize
    .sync({ force: false })
    .then(() => {
        console.log("db connected");
    })
    .catch(err => {
        console.error(err);
    });

**🔥 만든 라우터를 불러온다**
const indexRouter = require("./router");

**🔥 app에 라우터를 등록한다**
app.use("/nft", indexRouter);

app.listen(8000);