ExpressとSequelizeを連携したサンプルアプリケーション

ExpressとSequelizeを連携したサンプルアプリケーション

どうも、ぽっぽです。

GitHub – sequelize/express-example: A proposal for the usage of Sequelize within an Express.JS application.を参考にExpressアプリケーションとSequelizeを使ってデータベース操作を行ったサンプルアプリケーションです。

データの追加、検索して一覧を取得、データの更新、データの削除ができます。いわゆるCRUDの基本的なところを学べました。

expressインストール

npx express-generator
npm install

こちらの公式ドキュメントを参考にインストールしました。

ExpressはNode.jsのwebアプリケーションフレームワークです。バックエンドの処理をこちらでプログラミングします。

sequelizeインストール

npm i sequelize sequelize-cli
npx sequelize-cli init
npm i pg pg-hstore

SequelizeはNode.jsを使ったPromiseベースのORMです。ORMを使うとデータベースを意識しなくてもオブジェクトとしてデータが扱えます。スピードなどの性能を重視しなければ使うほうが良いと思っています。

データベースの知識が不要になることはありませんが、データベース定義などを個別に考えずにアプリケーション主体で考えられるので便利だと思います。

pgとpg-hstoreはデータベースにPostgresを使う場合です。他のデータベースを使う場合は公式ドキュメントを参考に必要なアプリケーションを指定してください。

sequelize-cliでモデル作成

npx sequelize-cli model:generate --name User --attributes username:string
npx sequelize-cli model:generate --name Task --attributes title:string
npx sequelize-cli db:migrate

Sequelizeの仕様に沿って記述すれば良いのですが、sequelize-cliを使うとテンプレート的にプログラムを出力してくれます。

テーブルとカラムだけ出力されます。データベースでいう関係や制約は出力されたプログラムに追記していくことになります。

UserTaskを1対多の関係で、Userが削除されたら関連するTaskが削除される制約を追加する場合、modelsディレクトリにあるそれぞれのファイルのプログラムを変更します。

// task.js
// ...
  Task.associate = function(models) {
    // Using additional options like CASCADE etc for demonstration
    // Can also simply do Task.belongsTo(models.User);
    Task.belongsTo(models.User, {
      onDelete: "CASCADE",
      foreignKey: {
        allowNull: false
      }
    });
  }
// ...
// user.js
// ...
  User.associate = function(models) {
    User.hasMany(models.Task);
  }
// ...

1対多の関係のためにTaskUserIdを追加します。migrationディレクトリの任意のファイルのプログラムを変更します。

// xxxxxxx-create-task.js
// ...
  UserId: {
    type: Sequelize.INTEGER,
    onDelete: "CASCADE",
    allowNull: false,
    references: {
      model: 'Users',
      key: 'id'
    }
  }
// ...

modelsディレクトリはExpressでオブジェクトを呼ぶために使います。migrationディレクトリはデータベースにテーブルを作成するために使います。

詳細は公式ドキュメントのmigrationをあわせて確認してください。

jadeをpugへ移行

参考にしたGitHubのリポジトリではテンプレートエンジンにjadeを使っていました。現在jadeはpugというテンプレートエンジンに変わっています。GitHubに登録したとき、セキュリティーエラーが出てしまっていたのであとからpugに変更しています。

その作業の過程で、パッケージを最新に更新しています。

npm install -g npm-check-updates
ncu -u
npm install
npm audit fix

パッケージのアップデートを行ってもpackage-lock.jsonの問題となっているパッケージは更新されずに困っていたところjadeに関連するパッケージであったので、調べるとjadeはpugに変わったことを知りました。

jadeをアンインストールしてpugをインストール。

npm un jade
npm i pug

この作業はダウンロードするソースには適用済みなので追加作業は必要ありません。

ExpressとSequlizeを使ったサンプルアプリケーション

ExpressとSequlizeを使ったサンプルアプリケーションをこちらからダウンロード出来ます。

npm install
npm start

Todoアプリを動作させる場合、NodeJSのコマンドプロンプトを開いて、ソースをダウンロードして展開した場所(package.jsonファイルがある)に移動します。1行目のコマンドを実行します。package.jsonのパッケージをインストールして、インストールが終わるまで数十秒ほど待ちます。
2行目のコマンドを実行するとブラウザにTodoアプリが表示されます。

終わるときは、コマンドプロンプト上でCtrl + Cをタイプします。

npx sequelize-cli initで生成される「config/config.json」ファイルはソースに含まれていません。各自の環境に合わせて編集する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

先頭に戻る