Node Js アプリで Sequelize ORM を使用する方法
Sequelize は、GitHub で 25.36k スターを獲得している、非常に人気があり安定した Promise ベースの Node.js ORM であり、Postgres、MySQL、MariaDB、SQLite、Microsoft SQL Server などの SQL データベースを SQL に変換するためのマッピング ツールまたはオブジェクト リレーショナル マッパーです. JavaScript オブジェクトへのステートメント.トランザクション、リレーションシップ、遅延読み込みと不安読み込み、読み取りレプリケーションなどを強力にサポートします.
現在のバージョンは Sequelize v6 で、Node v10 以降をサポートしています.
このチュートリアルでは、次のものがあることを前提としています.
Node.jsの基礎知識 マシンにインストールされたノード 任意のコードまたはテキスト エディター ローカルにインストールされた mysql、mariadb、postgresql、または sqlite3 などの少なくとも 1 つのデータベース
Sequelize は npm 経由で利用できます.プロジェクトに依存関係としてsequelizeをインストールする必要があります.
また、選択したデータベースに対して、次のドライバーのいずれかを手動でインストールする必要があります.
npm install --save pg pg-hstore (Postgres 用)
npm install --save mysql2 (mysql 用)
npm install --save mariadb (mariadb 用)
npm install --save sqlite3 (sqlite3 用)
npm install --save tedious (Microsoft SQL Server の場合)
データベースに接続するには、Sequelize インスタンスを作成する必要があります.
このために、sequelize-connection.js のような新しいファイルを作成します.
続編-connection.js
パラメータを個別に渡す (他の方言)
.authenticate() 関数を使用して、接続が正常かどうかをテストできます.
Sequelize はデフォルトで接続を開いたままにし、すべてのクエリに同じ接続を使用します.接続を閉じる必要がある場合は、sequelize.close() を呼び出します (これは非同期で、Promise を返します).
モデルを作成するには
これで、Sequelize を使用して CRUD 操作を実行し、データベースにデータを保存する単純な Node.js/Express.js アプリケーションを作成する準備が整いました.
新しいユーザーを追加
すべてのユーザーを一覧表示する
1 人のユーザーを検索する
ユーザーを更新する
ユーザーを削除する
次の Node.js プロジェクトで Sequelize.js を構成する方法を学びました.
このチュートリアルに従って問題が発生した場合は、 GitHub Repository のコードを自由に確認してください.
この記事に関するご質問やご意見がございましたら、お気軽にお問い合わせください.
読んでくれてありがとう.
Node.js は、Chrome の V8 JavaScript エンジン上に構築された JavaScript ランタイムです: https://nodejs.org/en/
Express.js、Node.js 用の高速で自由なミニマリスト Web フレームワーク: https://expressjs.com/
Sequelize、promise ベースの Node.js ORM: https://sequelize.org/
現在のバージョンは Sequelize v6 で、Node v10 以降をサポートしています.
前提条件
このチュートリアルでは、次のものがあることを前提としています.
Sequelize は npm 経由で利用できます.プロジェクトに依存関係としてsequelizeをインストールする必要があります.
npm install --save sequelize
また、選択したデータベースに対して、次のドライバーのいずれかを手動でインストールする必要があります.
npm install --save pg pg-hstore (Postgres 用)
npm install --save mysql2 (mysql 用)
npm install --save mariadb (mariadb 用)
npm install --save sqlite3 (sqlite3 用)
npm install --save tedious (Microsoft SQL Server の場合)
データベースへの接続
データベースに接続するには、Sequelize インスタンスを作成する必要があります.
このために、sequelize-connection.js のような新しいファイルを作成します.
続編-connection.js
const { Sequelize } = require('sequelize');
データベースへの接続
パラメータを個別に渡す (他の方言)
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql' || 'mariadb' || 'postgres' || 'mssql'
});
module.exports = sequelize;
接続のテスト
const { sequelize } = require('./models');
.authenticate() 関数を使用して、接続が正常かどうかをテストできます.
try {
await sequelize.authenticate();
// await sequelize.sync({ force: true, logging: console.log });
console.log(`Server started on http://localhost:${port}`);
console.log('Database connection has been established successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
接続を閉じる
Sequelize はデフォルトで接続を開いたままにし、すべてのクエリに同じ接続を使用します.接続を閉じる必要がある場合は、sequelize.close() を呼び出します (これは非同期で、Promise を返します).
モデルを作成するには
const { DataTypes } = require('sequelize');
const sequelize = require('./index');
const User = sequelize.define('users', {
firstname: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notNull: { msg: 'User must have a firstname' },
notEmpty: { msg: 'firstname must not be empty' },
},
},
lastname: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notNull: { msg: 'User must have a lastname' },
notEmpty: { msg: 'lastname must not be empty' },
},
},
email: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notNull: { msg: 'User must have a email' },
notEmpty: { msg: 'Email must not be empty' },
isEmail: { msg: 'Must be a valid email' },
},
},
});
これで、Sequelize を使用して CRUD 操作を実行し、データベースにデータを保存する単純な Node.js/Express.js アプリケーションを作成する準備が整いました.
新しいユーザーを追加
app.post('/users', async (req, res) => {
try {
let { firstname, lastname, email } = req.body;
firstname = firstname.toLowerCase().trim();
lastname = lastname.toLowerCase().trim();
email = email.toLowerCase().trim();
const user = await User.create({ firstname, lastname, email });
return res.status(201).json({ status: true, data: user });
} catch (error) {
res.status(500).json({
status: false,
errors: Object.values(error.errors).map((el) => el.message),
});
}
});
すべてのユーザーを一覧表示する
app.get('/users', async (req, res) => {
try {
const user = await User.findAll();
return res.status(200).json({ status: true, data: user });
} catch (error) {
res.status(500).json({
status: false,
errors: Object.values(error.errors).map((el) => el.message),
});
}
});
1 人のユーザーを検索する
app.get('/users/:id', async (req, res) => {
try {
const user = await User.findAll({ where: { id: req.params.id } });
return res.status(200).json({ status: true, data: user });
} catch (error) {
res.status(500).json({
status: false,
errors: Object.values(error.errors).map((el) => el.message),
});
}
});
ユーザーを更新する
app.put('/users/:id', async (req, res) => {
try {
let { firstname, lastname, email } = req.body;
firstname = firstname.toLowerCase().trim();
lastname = lastname.toLowerCase().trim();
email = email.toLowerCase().trim();
const id = parseInt(req.params.id, 10);
if (Number.isNaN(id)) return res.status(400).end();
const isUserExist = await User.findOne({ where: { id } });
if (!isUserExist)
return res.status(404).json({ status: false, error: 'No User' });
const user = await User.findByPk(id);
user.firstname = firstname ? firstname : user.firstname;
user.lastname = lastname ? lastname : user.lastname;
user.email = email ? email : user.email;
const updatedUser = await user.save();
return res.status(200).json({ status: true, data: updatedUser });
} catch (error) {
res.status(500).json({
status: false,
errors: error,
});
}
});
ユーザーを削除する
app.delete('/users/:id', async (req, res) => {
try {
const id = parseInt(req.params.id, 10);
if (Number.isNaN(id)) return res.status(400).end();
const isUserExist = await User.findOne({ where: { id } });
if (!isUserExist)
return res.status(404).json({ status: false, error: 'No User' });
const user = await User.findByPk(id);
await user.destroy();
return res
.status(200)
.json({ status: true, msg: 'User deleted successfully!' });
} catch (error) {
console.log(error);
res.status(500).json({
status: false,
errors: error,
});
}
});
結論
次の Node.js プロジェクトで Sequelize.js を構成する方法を学びました.
このチュートリアルに従って問題が発生した場合は、 GitHub Repository のコードを自由に確認してください.
この記事に関するご質問やご意見がございましたら、お気軽にお問い合わせください.
読んでくれてありがとう.
クレジット
Node.js は、Chrome の V8 JavaScript エンジン上に構築された JavaScript ランタイムです: https://nodejs.org/en/
Express.js、Node.js 用の高速で自由なミニマリスト Web フレームワーク: https://expressjs.com/
Sequelize、promise ベースの Node.js ORM: https://sequelize.org/
Reference
この問題について(Node Js アプリで Sequelize ORM を使用する方法), 我々は、より多くの情報をここで見つけました https://dev.to/workforweb/how-to-use-sequelize-orm-in-node-js-app-3amfテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol