どうも、ぽっぽです。
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を使うとテンプレート的にプログラムを出力してくれます。
テーブルとカラムだけ出力されます。データベースでいう関係や制約は出力されたプログラムに追記していくことになります。
User
はTask
を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対多の関係のためにTask
にUserId
を追加します。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」ファイルはソースに含まれていません。各自の環境に合わせて編集する必要があります。