|
|
1. 数据库配置 config.json
接上一节的课程继续。首先看到config/config.json文件,打开后,很明显,这是连接数据库的配置文件。
当我们把这里配置好,Node项目就会自动的,连接到数据库上了。注意看,这里有三组配置,分别是:development、test和production。它们分别是开发环境、测试环境,还有开发完成后,要部署上线的生产环境的配置。
环境 说明
development 开发环境
test 测试环境
production 生产环境
现在,我们在开发过程中,所以只需要关注开发环境就好了。
那么来修改配置
{
"development": {
"username": "root",
"password": "clwy1234",
"database": "clwy_api_development",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"test": {
"username": "root",
"password": null,
"database": "clwy_api_test",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"production": {
"username": "root",
"password": null,
"database": "clwy_api_production",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
}
}
第一个要改的就是密码,修改成docker配置里,我们设定的密码。接着要改的是数据库的名字,改为clwy_api_development。
最下面,还要加上时区的配置,因为我们中国是在+8区。这样在查询的时候,时间才不会出错。
那么同样的,也简单的给test和production也调整一下。
2. 模型
现在使用数据库客户端软件,将之前人工建的Articles表直接删除,因为这个表还缺少一些sequelize所需要的字段。而且我们现在可以使用sequelize来创建数据表,而不用手动建表。
image.png
接着,大家一起来看一个神奇的咒语,
接着,大家一起来看一个神奇的咒语,
sequelize model:generate --name Article --attributes title:string,content:text
这个咒语,是用来新建模型的,将来大家还会经常用到它的。
打开models/article.js。可以看到,在模型文件夹中,出现了一个叫做Article的模型,它里面有标题和内容。
标题是字符串类型,对应到 MySQL 数据库里,它就会自动变成varchar。内容部分,则是text类型。
现在就只需要知道,模型就是用来操作数据库的,就是因为有这个文件的存在,我们后面才能使用Article.findAll()这种代码来查询数据。模型里还有一些其他的东西,我们暂时不用管它,后面学到了相关的知识了,我们到时候再来修改。
3. 迁移文件再来看看migrations文件夹,里面出现了一个由当前时间,加上create-article命名的文件,这个文件就是迁移文件了。它的作用就是用来创建、修改表的。看到这里,在up部分。我们通过createTabel,创建了一个叫做Articles的表。
大家注意哦,这就是我之前和大家说的,模型名字是单数:Article。但是表的名字一定是复数形式,也就是Articles。这是sequelize里的命名规则,一定不要搞错了。如果你的单复数搞错了,那sequelize就找不到对应的东西了。
接着往下看,这些就是定义了Articles这张表里面所拥有的字段了,比方说id、title、content,这些外还出现了两个时间字段createdAt和updatedAt。
这两个字段,当在新增或修改数据的时候,sequelize会自动的帮我们填写的。
这里的内容,已经非常好了,我们只需要做一个小小的调整。就是title部分,我需要它不为null,所以加上allowNull: false,。content部分,我们就不管它了,已经很好了。
至于down部分,是新建表的反向操作,里面写的是dropTable,也就是删除当前的表。这样当我们创建表,建完后,突然又发现有错误,也可以通过相关命令来删除当前表。
3.1. 运行迁移改完后,再来学另一条新咒语。
sequelize db:migrate打开数据库客户端,刷新一下,可以看到Articles表又神奇的出现了。看一看结构选项卡,里面的字段和我们当时自己手动创建的完全一样,而且还多了两个时间字段。这就是迁移文件的作用了。
另外一张表SequelizeMeta是我们运行迁移命令时,自动生成的。这张表里记录了当前已经跑过了哪些迁移,这样当你再次运行sequelize db:migrate时,已经运行过的迁移文件,就不会重复再次执行了。
4. 种子文件现在表也有了,下一步就是要填充一些在开发中用来测试的数据了。当然你可以用手动往里面一点点填,但很多情况我们做测试,可能需要非常多的数据。例如我希望数据库里有 100 篇文章,这时候,我们一条条的录入也太笨了点。最简单的方法就是使用种子文件了。再来试试这条命令
sequelize seed:generate --name article完成后,在seeds目录,就看到刚才命令新建的种子文件了。同样也是分为两个部分,up部分用来填充数据,down部分是反向操作,用来删除数据的。
先来看up部分,默认生成的代码里,给了我们一个案例。很明显,它这里是往People表里,插入了一点儿数据。
await queryInterface.bulkInsert('People', [{ name: 'John Doe', isBetaMember: false}], {});我们可以参考它的写法,改为往Articles表里插入数据。
async up (queryInterface, Sequelize) { const articles = []; const counts = 100; for (let i = 1; i <= counts; i++) { const article = { title: `文章的标题 ${i}`, content: `文章的内容 ${i}`, createdAt: new Date(), updatedAt: new Date(), }; articles.push(article); } await queryInterface.bulkInsert('Articles', articles, {});},因为计划要插入 100 条数据,所以我们定义一个叫做articles的常量,它默认是一个空数组。
接着再定义一个计数器,counts = 100。然后简单的写一个for循环,在title和content部分,我们加上i,这样每个标题和内容都有一个序号,便于我们使用。
两个时间字段,就用现在的当前时间。
然后把循环的数据,通过push,不断的添加到articles里。最后一次性把所有的数据,插入到Articles表中。
至于down部分,也参考它的格式,修改一下
async down (queryInterface, Sequelize) { await queryInterface.bulkDelete('Articles', null, {});}
4.1. 运行种子又到了激动人心的时刻了,大家一起来见证奇迹吧。开始运行种子,注意最后面这里,需要填写上你的种子文件的文件名。大家每个人都是不一样的,千万不要直接照抄。
sequelize db:seed --seed xxx-article刷新数据库,十万分之一个呼吸的时间,一百条数据已经插入完成。

5. 总结一下大家注意了,日常开发项目,都是采用固定的步骤:
| 步骤 | 命令 | 说明 | | 第一步 | sequelize model:generate --name Article --attributes ... | 建模型和迁移文件 | | 第二步 | 人工处理 | 根据需求调整迁移文件 | | 第三步 | sequelize db:migrate | 运行迁移,生成数据表 | | 第四步 | sequelize seed:generate --name article | 新建种子文件 | | 第五步 | 人工处理 | 将种子文件修改为自己想填充的数据 | | 第六步 | sequelize db:seed --seed xxx-article | 运行种子文件,将数据填充到数据表中 | 这里的种子部分并不是必须的,但对于一些需要一下子插入大量数据的情况来说,使用种子还是非常方便的。我们可以根据实际的需求来灵活运用。
|
|