简介
Sequelize 是一个基于 Node.js 的 ORM 框架,可以在 Node.js 中操作各种不同类型的数据库。ORM(Object-Relational Mapping)是一种编程技术,它可以将面向对象语言中的对象转换为关系型数据库中的表。
在本篇文章中,我们将详细介绍如何使用 Sequelize 在 Node.js 中进行 ORM 操作。我们将从安装 Sequelize 开始,一步一步讲解它的用法,并给出代码示例以帮助读者更好地理解。
安装
首先需要在 Node.js 中安装 Sequelize。在命令行中执行以下命令:
npm install --save sequelize
连接数据库
在使用 Sequelize 前,需要先连接数据库。在使用 Sequelize 时,我们需要传递一些数据库连接信息,如数据库名称、用户名、密码等。在本例中,我们将使用 MySQL 数据库。
在项目中创建一个 config.json 文件,用于存储数据库连接信息:
// javascriptcn.com 代码示例 { "development": { "username": "root", "password": "", "database": "dev_database", "host": "localhost", "dialect": "mysql" }, "test": { "username": "root", "password": "", "database": "test_database", "host": "localhost", "dialect": "mysql" }, "production": { "username": "root", "password": "", "database": "prod_database", "host": "localhost", "dialect": "mysql" } }
接下来再创建两个文件:
- db.js:用于创建 Sequelize 实例并连接数据库。
- sequelize.js:用于获取 Sequelize 实例。
db.js
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const env = process.env.NODE_ENV || 'development'; const config = require(__dirname + '/../config/config.json')[env]; const sequelize = new Sequelize(config.database, config.username, config.password, config); // 测试连接是否成功 sequelize .authenticate() .then(() => { console.log('Connection has been established successfully.'); }) .catch(err => { console.error('Unable to connect to the database:', err); }); module.exports = sequelize;
sequelize.js
const Sequelize = require('sequelize'); const sequelize = require('./db'); module.exports = sequelize;
上述代码中,我们使用了环境变量获取当前运行环境(开发环境、测试环境或生产环境),在 config.json 中获取相应的数据库连接配置,并创建 Sequelize 实例和连接数据库。我们还测试了连接是否成功,并输出了连接成功或失败的信息。
创建表格
在 Sequelize 中,我们使用模型(Model)来管理数据表。所谓模型就是指一张数据表对应的 JavaScript 类。通过 Sequelize,我们可以将查询语句转换为可用的 JavaScript 方法,使用方便。
在这里我们需要创建一个 Book 模型,用于对数据库的 book 表进行操作。首先需要在 models 目录下创建一个 book.js 文件,写入下面的代码:
// javascriptcn.com 代码示例 const Sequelize = require('sequelize'); const sequelize = require('../config/sequelize'); const Book = sequelize.define('book', { id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true }, title: { type: Sequelize.STRING, allowNull: false }, author: { type: Sequelize.STRING, allowNull: false }, isbn: { type: Sequelize.STRING, allowNull: false }, publishedAt: { type: Sequelize.DATE, allowNull: false } }); module.exports = Book;
上述代码中,我们首先引入了 Sequelize 和我们刚刚创建的 sequelize.js 文件。此外,我们使用 define 方法创建了一个名为 Book 的模型,并定义了 book 表格的属性。其中,id 实为主键,且这个值是自增的;title、author、isbn、publishedAt 是各自对应的字段,都不能为空。
增删改查(CRUD)
有了模型后,我们就可以进行增删改查操作了。下面我们将分别介绍增删改查操作的代码示例。
创建记录
// javascriptcn.com 代码示例 const Book = require('./models/book'); Book.create({ title: 'Node.js 实战', author: '张三', isbn: '9787508342570', publishedAt: '2017-01-01' }).then(book => { console.log('Added a new book:\n', book.toJSON()); }).catch(err => { console.log('Error adding a new book', err); });
上述代码中,我们通过 create 方法创建了一条新纪录,并将属性和属性值传入其中。需要特别注意的是,我们使用了 then 和 catch 方法处理异步请求的结果,其中 then 用于处理成功请求的结果,catch 用于处理失败请求的结果。
查询记录
// javascriptcn.com 代码示例 const Book = require('./models/book'); Book.findAll({ where: { author: '张三' } }).then(result => { console.log(result.length, 'book(s) found'); for(let book of result) { console.log(book.toJSON()); } }).catch(err => { console.log('Error finding books', err); });
上述代码中,我们使用 findAll 方法查询 author 为 “张三” 的图书记录。findAll 方法返回一个数组,包含所有满足条件的记录。在返回的结果中,我们使用了 for...of 语法,而非 forEach 方法,主要是为了更符合 ES6 的语法规范,并方便理解。
更新记录
// javascriptcn.com 代码示例 const Book = require('./models/book'); Book.update( { title: 'JavaScript 实战' }, { where: { author: '张三' } } ).then(updatedCount => { console.log(updatedCount[0], 'record(s) are updated'); }).catch(err => { console.log('Error updating', err); });
上述代码中,我们使用 update 方法更新所有 author 为 “张三”的图书记录的 title 字段为 “JavaScript 实战”。update 方法返回更新的记录数,我们使用 updatedCount[0] 输出更新的记录数。
删除记录
// javascriptcn.com 代码示例 const Book = require('./models/book'); Book.destroy({ where: { author: '张三' } }).then(deletedCount => { console.log(deletedCount, 'record(s) are deleted'); }).catch(err => { console.log('Error deleting', err); });
上述代码中,我们使用 destroy 方法删除所有 author 为 “张三”的图书记录。destroy 方法返回被删除的记录数。
总结
本文从安装 Sequelize 开始,一步一步讲解了使用 Sequelize 在 Node.js 中进行 ORM 操作,并给出了相应的示例代码。希望本文能为初学者提供一些帮助,让大家更加深入理解 Sequelize。如有疑问或不足之处,欢迎留言指出。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65332cb17d4982a6eb69e231