express+sequelize

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 表就建好了

express+sequelize_第1张图片
image.png

(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)
  });
});

```·

你可能感兴趣的:(express+sequelize)