前言
在前端开发中,我们经常需要和数据库打交道。而 Sequelize 是一款 Node.js 中的 ORM 框架,可以方便地操作数据库,提高开发效率。而 Egg.js 是一款基于 Koa 的 Node.js 框架,也是一款非常流行的后端框架。本文将介绍 Sequelize 在 Egg.js 中的应用实践,包括如何配置和使用 Sequelize,以及一些实际案例。
安装和配置 Sequelize
在 Egg.js 中使用 Sequelize 需要先安装相应的依赖包。可以使用 npm 或 yarn 安装:
npm install --save egg-sequelize sequelize mysql2
或
yarn add egg-sequelize sequelize mysql2
安装完成后,需要在 Egg.js 的配置文件中进行配置。在 config/config.default.js 文件中添加以下配置:
config.sequelize = { dialect: 'mysql', // 数据库类型 host: 'localhost', // 数据库地址 port: 3306, // 数据库端口号 username: 'root', // 数据库用户名 password: '123456', // 数据库密码 database: 'test', // 数据库名称 };
使用 Sequelize
定义模型
在 Sequelize 中,每个表都对应一个模型。我们可以通过定义模型来操作数据库。在 Egg.js 中,可以在 app/model 目录下新建一个 js 文件,然后定义模型。以下是一个例子:
// javascriptcn.com 代码示例 module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; const User = app.model.define('user', { id: { type: INTEGER, primaryKey: true, autoIncrement: true }, name: STRING(30), age: INTEGER, created_at: DATE, updated_at: DATE, }); return User; };
其中,app.model.define 方法接收两个参数,第一个参数是模型名称,第二个参数是模型定义。模型定义中包含表中的字段以及字段类型。在这个例子中,我们定义了一个名为 user 的模型,包含 id、name、age、created_at 和 updated_at 五个字段。
常用操作
查询数据
Sequelize 提供了多种方式来查询数据。以下是一些常用的方式:
// javascriptcn.com 代码示例 // 查询所有数据 const users = await app.model.User.findAll(); // 根据条件查询数据 const users = await app.model.User.findAll({ where: { age: 18, }, }); // 查询单个数据 const user = await app.model.User.findOne({ where: { id: 1, }, }); // 分页查询数据 const users = await app.model.User.findAndCountAll({ limit: 10, offset: 0, }); // 查询数据并排序 const users = await app.model.User.findAll({ order: [['age', 'DESC']], });
插入数据
const user = await app.model.User.create({ name: '小明', age: 18, });
更新数据
// javascriptcn.com 代码示例 const user = await app.model.User.update( { name: '小红', }, { where: { id: 1, }, } );
删除数据
const user = await app.model.User.destroy({ where: { id: 1, }, });
示例代码
以下是一个完整的示例代码,包括定义模型和常用操作:
// javascriptcn.com 代码示例 // app/model/user.js module.exports = (app) => { const { STRING, INTEGER, DATE } = app.Sequelize; const User = app.model.define('user', { id: { type: INTEGER, primaryKey: true, autoIncrement: true }, name: STRING(30), age: INTEGER, created_at: DATE, updated_at: DATE, }); return User; }; // app/controller/user.js const Controller = require('egg').Controller; class UserController extends Controller { async index() { const { ctx } = this; const users = await ctx.model.User.findAll(); ctx.body = users; } async show() { const { ctx } = this; const user = await ctx.model.User.findOne({ where: { id: ctx.params.id, }, }); ctx.body = user; } async create() { const { ctx } = this; const user = await ctx.model.User.create(ctx.request.body); ctx.body = user; } async update() { const { ctx } = this; const user = await ctx.model.User.update( ctx.request.body, { where: { id: ctx.params.id, }, } ); ctx.body = user; } async destroy() { const { ctx } = this; const user = await ctx.model.User.destroy({ where: { id: ctx.params.id, }, }); ctx.body = user; } } module.exports = UserController; // app/router.js module.exports = (app) => { const { router, controller } = app; router.get('/users', controller.user.index); router.get('/users/:id', controller.user.show); router.post('/users', controller.user.create); router.put('/users/:id', controller.user.update); router.delete('/users/:id', controller.user.destroy); };
总结
本文介绍了 Sequelize 在 Egg.js 中的应用实践,包括安装和配置 Sequelize,以及定义模型和常用操作。Sequelize 可以方便地操作数据库,提高开发效率。在 Egg.js 中使用 Sequelize,可以快速地搭建一个后端系统。希望本文对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65880931eb4cecbf2dd37253