express+sequelize写后台
官方示例
先看一个(大约3年前的.....)官网的例子
我们愉快的发现他是用 express-cli
创建的项目,所以我机智的创建了一个express-demo看看两者之间的差异
(1)多了4个目录分别是,分析一下
- config 目录
- 这里写的是数据库配置项
- migrations 目录
- 这里是迁移文件包括了一个user和Task
- models 目录
- 这个就是 sequelize 的模型了
- test 目录
- 这么小的项目还有测试文件???
- .sequelizerc文件
- 了解sequelize的人都知道,生成配置项的文件
(2)在routes文件中主要使用到modal文件的
-
看一个用户route的例子
首先是导入modal
var models = require('../models');
- 增
router.post('/create', function(req, res) { models.User.create({ username: req.body.username }).then(function() { res.redirect('/'); }); });
- 删
router.get('/:user_id/destroy', function(req, res) { models.User.destroy({ where: { id: req.params.user_id } }).then(function() { res.redirect('/'); }); });
- 改
没看到
- 查
router.get('/', function(req, res) { models.User.findAll({ include: [ models.Task ] }).then(function(users) { res.render('index', { title: 'Sequelize: Express Example', users: users }); }); });
- 增
看完代码是不是感觉特别的简单?
上手试试
就写一个 (1)班级-(n)老师-(n)学生 的例子玩玩
1. 使用express-cli创建项目
express myapp
2. 导入sequelize sequelize-cli mysql2
cnpm i -S sequelize sequelize-cli mysql2 cross-env
3. 删除不必要的视图引擎,并修改route逻辑
/* GET home page. */
router.get('/', function(req, res, next) {
res.json({ title: 'Express' });
});
试一下 http://localhost:3000/
4. 推荐中间件
- nodemon 热重载
5.使用sequelize-cli建表和模型
(1)新建 .sequelizerc
文件
(2)输入内容
```
const path = require('path');
module.exports = {
'config': path.resolve('config', 'database.json'),
'models-path': path.resolve('db', 'models'),
'seeders-path': path.resolve('db', 'seeders'),
'migrations-path': path.resolve('db', 'migrations')
}
```
(3)初始化创建db环境
./node_modules/.bin/sequelize init
会生成db目录,和config目录,修改config文件下的数据库配置为自己的数据库配置。
(4)创建数据库
./node_modules/.bin/sequelize db:create
(5)创建表和模型
我们需要一个班级表,老师表,学生表
- 班级 Class id,name,
- 老师 Teacher id,subjectId,name,avator,sex,age,mobile
- 班级老师中间表 ClassTeacher id, teacherId, classId,
- 学生 Student id,classId,name,sex,age,email,
- 学科表 Subject id,name
通过sequelize-cli
的指令创建模型
./node_modules/.bin/sequelize model:generate --name Class --attributes name:string
./node_modules/.bin/sequelize model:generate --name Teacher --attributes subjectId:INTEGER,name:string,avator:string,sex:INTEGER,age:INTEGER,mobile:string
./node_modules/.bin/sequelize model:generate --name ClassTeacher --attributes teacherId:INTEGER,classId:INTEGER
./node_modules/.bin/sequelize model:generate --name Student --attributes classId:INTEGER,name:string,sex:INTEGER,age:INTEGER,email:string
./node_modules/.bin/sequelize model:generate --name Subject --attributes name:string
再运行
./node_modules/.bin/sequelize db:migrate
表就建好了
(6)造一点种子数据
- 可以用
sequelize-cli
来造./node_modules/.bin/sequelize seed:generate --name demo-class 再在生成的seeders文件中找到对应的 修改为 'use strict'; module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.bulkInsert('Classes', [{ name: '一班', createdAt:new Date(), updatedAt:new Date() },{ name: '二班', createdAt:new Date(), updatedAt:new Date() }], {}); }, down: (queryInterface, Sequelize) => { return queryInterface.bulkDelete('Classes', null, {}); } };
- 也可以手动(这个我就不讲了)
在接口中操作数据
一个例子
var express = require('express');
var router = express.Router();
var models = require('../db/models');
const Sequelize = require('sequelize');
const Op = Sequelize.Op
/* 获取学生信息 */
router.get('/', function(req, res, next) {
const { classId,className,name } = req.query;
console.log('className',className)
let whereObj = {}
if(classId) whereObj.classId = classId
if(name) whereObj.name = {
[Op.like]: `%${name}%`,
}
models.Student.findAll({
where: whereObj,
attributes: {exclude:['createdAt', 'updatedAt']},
}).then(function(data) {
res.json(data)
});
});
```·