Sequelize 是 Node.js 中一款流行的 ORM 框架,可以与多种数据库进行交互。在 Hapi 中使用 Sequelize 可以方便地进行数据库操作,提高开发效率。本文将介绍如何在 Hapi 中使用 Sequelize,并提供相关示例代码。
安装
在使用 Sequelize 前,需要先安装相关依赖。可以使用 npm 或者 yarn 进行安装。
npm install sequelize mysql2
或者
yarn add sequelize mysql2
其中,mysql2 是 Sequelize 的依赖之一,用于连接 MySQL 数据库。如果需要使用其他类型的数据库,可以安装对应的依赖。
初始化 Sequelize
在使用 Sequelize 前,需要先对其进行初始化。可以在 Hapi 服务启动时进行初始化。
// www.javascriptcn.com code example
const Hapi = require('hapi');
const Sequelize = require('sequelize');
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
server.app.sequelize = sequelize;
server.start();在上述代码中,我们先创建了一个 Hapi 服务,并初始化了 Sequelize。其中,database、username 和 password 分别是数据库的名称、用户名和密码。host 是数据库的地址,dialect 是数据库类型,这里使用的是 MySQL。
定义模型
在使用 Sequelize 进行数据库操作时,需要先定义模型。模型对应数据库中的表,可以通过 Sequelize.define 方法进行定义。
// www.javascriptcn.com code example
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true
}
});在上述代码中,我们定义了一个名为 user 的模型,包含三个字段:firstName、lastName 和 email。其中,type 表示字段类型,allowNull 表示是否允许为空,unique 表示是否唯一。
数据库操作
在定义好模型后,就可以进行数据库操作了。Sequelize 提供了多种查询方式,包括查询、插入、更新和删除等。
查询
可以使用 findAll 方法查询所有记录,或者使用 findOne 方法查询单条记录。
const users = await User.findAll();
const user = await User.findOne({ where: { id: 1 } });在上述代码中,我们分别查询了所有用户和 ID 为 1 的用户。
插入
可以使用 create 方法插入新记录。
const user = await User.create({
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com'
});在上述代码中,我们插入了一个名为 John Doe 的用户。
更新
可以使用 update 方法更新记录。
await User.update({ firstName: 'Jane' }, { where: { id: 1 } });在上述代码中,我们将 ID 为 1 的用户的名字更新为 Jane。
删除
可以使用 destroy 方法删除记录。
await User.destroy({ where: { id: 1 } });在上述代码中,我们删除了 ID 为 1 的用户。
示例代码
下面是一个完整的示例代码,演示了如何在 Hapi 中使用 Sequelize 进行数据库操作。
// www.javascriptcn.com code example
const Hapi = require('hapi');
const Sequelize = require('sequelize');
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true
}
});
server.app.sequelize = sequelize;
server.route({
method: 'GET',
path: '/users',
handler: async (request, h) => {
const users = await User.findAll();
return users;
}
});
server.route({
method: 'POST',
path: '/users',
handler: async (request, h) => {
const { firstName, lastName, email } = request.payload;
const user = await User.create({ firstName, lastName, email });
return user;
}
});
server.route({
method: 'PUT',
path: '/users/{id}',
handler: async (request, h) => {
const { id } = request.params;
const { firstName } = request.payload;
await User.update({ firstName }, { where: { id } });
return { message: 'User updated' };
}
});
server.route({
method: 'DELETE',
path: '/users/{id}',
handler: async (request, h) => {
const { id } = request.params;
await User.destroy({ where: { id } });
return { message: 'User deleted' };
}
});
server.start();在上述代码中,我们定义了四个路由:获取所有用户、创建用户、更新用户和删除用户。通过调用 Sequelize 的相关方法,实现了对数据库的增删改查操作。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67da2052a941bf71341d9589