Node.js 小白入门课3-设置基本数据库
Sequelize(框架,数据库包文件,简化数据库编写)是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, SQLite 和 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 读取和复制等功能.
1.配置数据库
yarn add sequelize@^5.8.7 --save #安装数据库依赖包
yarn add mysql2 --save #安装mysql2数据库
sequelize init #初始化,会创建对应项目的模型、迁移、种子文件等
如果 windows 电脑遇到 sequelize 不是内部命令,请执行下面的命令
yarn add sequelize-cli sequelize
npx sequelize init
就出现了
多了以下4个文件夹
2、后端创建模型:
sequelize model:generate --name Article --attributes title:string,content:text
添加了一个名为"Article"的表格,里面除了自带的模片外,还增加title:string,content:text
3、在config/config.json文件中,修改数据库配置。
# "development": { #开发情况下
"username": "root",
"password": null, #苹果系统下改为跟用户名一样“root”,window系统可以设为空""
"database": "database_development", #把名字改为blog_development
"host": "127.0.0.1",
"dialect": "mysql"
4.打开Navicat,手动在你的数据库管理软件中创建你的本地数据库,名字叫 blog_development
建一个名为blog_development的数据库
5、执行数据库迁移:npx sequelize db:migrate
在blog_development里面增加一个叫“article”的表格
(也可以增加多个)
6、创建种子文件: npx sequelize seed:generate --name demo-article
7、更改种子文件数据后,运行种子文件:npx sequelize db:seed:all
up: async (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('Articles', [
{
title: '今天天气真好',
content: '天气预报说虽然今天是晴天,可是明天会下雨。',
createdAt: new Date(), #当前的时间
updatedAt: new Date()
},
{
title: '武汉什么早餐最好吃?',
content: '毫无疑问是三鲜豆皮 + 热干面 + 米酒',
createdAt: new Date(),
updatedAt: new Date()
},
]);
},
注:查看数据库,你会发现新插入的数据时间有问题,当服务器不在东八区时,处理时区问题有时可能比较烦, 特别是当客户端是北京时间,跟服务器有时差,这时需要做如下处理:
在config/config.json文件中添加如下代码:
"timezone": "+08:00"
如图所示:
备注:6.7两步其实可以不用种子文件后端操作,可以在匹配的数据库里自行添加
8、启动项目:yarn start 。查看代码你会发现,这时,我们已经创建了一个单独的模块 articles。
在views文件夹下的,app.js文件中注册路由,如下:
9、在routes文件夹下手动添加article.js文件,并对其做以下编辑
var express = require('express');
var router = express.Router();
var models = require('../models');
//查询文章,以列表形式显示
router.get('/', function (req, res, next) { //访问路首页接口地址,得到以下目的
models.Article.findAll({limit:2,order: [['id', 'DESC']]}) // 查询Article的所有数据的两条记录,以倒序(desc)的方式
.then(jieguo => { res.json({abc: jieguo}); //然后查到的结果(变量赋值abc)通过res.json导出,在http://localhost:3000/abc里面查看
})
});
//查询单个文章详情
router.get('/:id', function (req, res, next) {
let id = req.params.id;
models.Article.findByPk(id).then(article => {
res.json({article: article})
})
});
// 新增单个文章
router.post('/', function (req, res, next) {
//res.json(req.body)
models.Article.create(req.body).then((article) => {
res.json({article: article})
});
});
// 编辑单个文章
router.put('/:id', function (req, res, next) {
models.Article.findByPk(req.params.id).then(article => {
article.update(req.body);
res.json({article: article})
})
});
// 删除单个文章
router.delete('/:id', function (req, res, next) {
models.Article.findByPk(req.params.id).then(article => {
article.destroy();
})
});
module.exports = router;
编辑成功后,浏览器访问:http://localhost:3000/articles,你会发现,我要查的数据已被查出:
通过后台测试软件Postman对做的命令执行测试