美文网首页Node.js
express+sequelize

express+sequelize

作者: JackeeM | 来源:发表于2019-06-29 10:05 被阅读0次

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

    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

        本文链接:https://www.haomeiwen.com/subject/oivucctx.html