Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

Sequelize-cli-esmでSequelize をESモジュールで作成する

$
0
0

目的

  • nodeがESモジュールに対応したので、SequelizeをESモジュールで使用したい。
  • フロントエンド、バックエンドともにimportで統一した方が理解しやすい。
    • 初めて開発する人にfrontendはimport、backendはrequire()を使用する理由を説明しづらい。

前提

サンプルでは下記を使用。sequelizeについて基礎的な知識があること。

  • Node.js v14以降 (ESモジュール対応済み)
  • sequelize:6.3.5
  • sequelize-cli-esm:5.0.6 (ESモジュール版cli)
  • sqlite3:5.0.0 (データベース)

  • package.jsonに「"type":"module"」を追加しnodeのデフォルトをESモジュールにする。


概要

  1. sequelize-cli-esm (ESモジュール対応版Sequelize CLI)を利用して、ESモジュールでひな形を生成する
  2. package.jsonに「"type":"module"」を追加(nodeのデフォルトをESモジュールにする)
  3. sequelize-cli-esmでテンプレートファイルの作成と、マイグレーションの実行を行う
  • 今回の手順ではUsersテーブルを作成し、サンプルデータを登録する。
  • sequelize-cli-esm はnode_module/.binに「sequelize-esm」という名前でインストールされる。(yarnやnpxで実行する際、コマンド名を間違えないこと)
  • 生成されるファイルはesモジュール形式となるため「"type":"module"」を追加するか、ファイルの拡張子を「.mjs 」にする。

手順

必要なパッケージをインストール

yarn init -y
yarn add sequelize sqlite3
yarn add sequelize-cli-esm -D

package.json

{"name":"sequelize-cli-esm","version":"1.0.0","main":"index.js","license":"MIT","type":"module","dependencies":{"sequelize":"^6.3.5","sqlite3":"^5.0.0"},"devDependencies":{"sequelize-cli-esm":"^5.0.6"}}

Sequelize CLI による初期設定

yarn sequelize-esm init

config、migrations、models、seedersの各フォルダが作成される。

/config/config.jsonを修正する

dialectを"sqlite"、storageにデータベースの保存ファイルを指定する。

{"development":{"database":"database_development","dialect":"sqlite","storage":"database.sqlite3"}}

モデルの作成

yarn sequelize-esm model:generate --name User --attributes name:string,email:string,password:string
  • modelsフォルダに「users.js」ファイルが作成される(モデル定義)
  • micrationsフォルダに「yyyymmddhhmmss-create-users.js」というファイルが作成される(マイグレーション用テーブル定義)

マイグレーションを行いテーブルを作成する

yarn sequelize-esm db:migrate

マイグレーションを取り消す場合

ひとつ前に戻す

yarn sequelize-esm db:migrate:undo

マイグレーションを全て取り消す

yarn sequelize-esm db:migrate:undo:all

データを追加する(seed)

yarn sequelize-esm seed:generate --name test-users

下記ファイルが作成される。(ESモジュールで作成されている)

  • 修正前
exportdefault{asyncup(queryInterface,Sequelize){/**
     * Add seed commands here.
     *
     * Example:
     * await queryInterface.bulkInsert('People', [{
     *   name: 'John Doe',
     *   isBetaMember: false
     * }], {});
    */asyncdown(queryInterface,Sequelize){/**
     * Add commands to revert seed here.
     *
     * Example:
     * await queryInterface.bulkDelete('People', null, {});
     */}};
  • 修正後
exportdefault{asyncup(queryInterface,Sequelize){constnow=newDate();returnawaitqueryInterface.bulkInsert("Users",[{name:"name1",username:"username1",email:"email1",password:"password1",createdAt:now,updatedAt:now},{name:"name2",username:"username2",email:"email2",password:"password2",createdAt:now,updatedAt:now},{name:"name3",username:"username3",email:"email3",password:"password3",createdAt:now,updatedAt:now},{name:"name4",username:"username4",email:"email4",password:"password4",createdAt:now,updatedAt:now},],{});},asyncdown(queryInterface,Sequelize){returnawaitqueryInterface.bulkDelete("Users",null,{});}};

データ登録用のコマンドを実行する

yarn sequelize-esm db:seed:all
  • データが登録されていることを確認する
idnameusernamemailpasswordcreatedAtupdatedAt
1name1username1email1password12020-12-30 14:36:38.895 +00:002020-12-30 14:36:38.895 +00:00
2name2username2email2password22020-12-30 14:36:38.895 +00:002020-12-30 14:36:38.895 +00:00
3name3username3email3password32020-12-30 14:36:38.895 +00:002020-12-30 14:36:38.895 +00:00
4name4username4email4password42020-12-30 14:36:38.895 +00:002020-12-30 14:36:38.895 +00:00

登録したデータを削除する場合

yarn sequelize-esm db:seed:undo:all

参考ページ

https://mseeeen.msen.jp/sequelize-for-es6/


Viewing all articles
Browse latest Browse all 8691

Trending Articles