zoukankan      html  css  js  c++  java
  • egg-sequelize --- nodejs

    项目

    egg + sequelize + mysql2


    项目结构

    配置


    安装模块

    npm install --save egg-sequelize
    
    npm install --save egg-cors
    
    npm install --save mysql2

    config/pulgin.js

    exports.sequelize = {
        enable: true,
        package: 'egg-sequelize',
    };
    exports.cors = {
        enable: true,
        package: 'egg-cors',
    };

    config/config.default.js

       //mysql配置开始
       config.sequelize = {
        dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
        dialectOptions: {
          charset: 'utf8mb4',
        },
        database: 'nodejs',
        host: 'localhost',
        port: '3306',
        username: 'root',
        password: 'root',
        timezone: '+08:00',
      };
      //mysql配置结束
      //cors配置开始
      config.security = {
        csrf: {
          enable: false,
        },
        domainWhiteList: [ 'http://localhost:8080' ],
      };
      config.cors = {
        credentials: true,
      };
      //cors配置结束

    数据建模


    mysql 建表

    CREATE TABLE `collect` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '收藏id',
      `author` varchar(255) DEFAULT NULL COMMENT '作者',
      `date` varchar(255) DEFAULT NULL COMMENT '日期',
      `link` varchar(255) DEFAULT NULL COMMENT '链接',
      `title` varchar(255) DEFAULT NULL COMMENT '标题',
      `created_at` datetime DEFAULT NULL COMMENT '创建时间',
      `updated_at` datetime DEFAULT NULL COMMENT '更改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `title` (`title`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表';

    model/collect.js

    'use strict';
    module.exports = app => {
        const {
            INTEGER,
            STRING,
            DATE
        } = app.Sequelize;
        const Collect = app.model.define('collect',{
            id:{
                type:INTEGER,
                primaryKey:true,
                autoIncrement:true
            },
            author:STRING,
            date:STRING,
            link:STRING,
            title:STRING,
            created_at:DATE,
            updated_at:DATE
        },{
            freezeTableName: true, //使用默认表名,不会变以collects
        })
        return Collect;
    }

    选配)启动时创建数据库表

    // {work_dir}/app.js
    module.exports = app => {
        app.beforeStart(async function () {
            await app.model.sync({ force: true });
        });
    };

    service


    service/collect.js

    'use strict';
    
    const Service = require('egg').Service;
    
    class CollectService extends Service {
    
        // 查询所有数据
        async findAll() {
            let ret = await this.ctx.model.Collect.findAll()
    
            console.log(ret)
            return ret
        }
    
        // 增加数据
        async create(data) {
            await this.ctx.model.Collect.create(data)
            .then(res => {
                console.log('res: '+ JSON.stringify(res))
            }).catch(err => {
                console.log('err: '+ JSON.stringify(err))
            })
    
            // try{  
            //     let a= await this.ctx.model.Collect.create(data)
            //     console.log(a)
            // }catch(err){
            //     console.log(err)
            // }
        }
    
        // 修改数据
        async update() {
            const ret = await this.ctx.model.Collect.update({
                author: '新作者'
            }, {
                where: {
                    id: 2
                }
            }).then(ok => {
                console.log('ok')
                console.log(ok)
            }).catch(e => {
                console.log('message:' + e)
            })
        }
    
        // 删除数据
        async delete(callback){
            await this.ctx.model.Collect.destroy({
                where: {
                    id: 20
                }
            }).then(res => {
                console.log('res:' + JSON.stringify(res))
                return callback(JSON.stringify(res))
            })
    
        }
    
    
        // 自定义查询
        async query(callback){
            let sql = 'SELECT COUNT(1) FROM collect'
            let ret = await this.ctx.model.query(sql, {type: 'SELECT'})
            return ret
        }
    }
    
    module.exports = CollectService;

    controller


    controller/collect.js

    'use strict';
    
    const Controller = require('egg').Controller;
    
    class CollectController extends Controller {
        async findAll(){
            const {ctx} = this;
            ctx.body = await ctx.service.collect.findAll()
        }
    
        async create(){
            const ctx = this.ctx
            const body = ctx.request.body
    
            const ret = await ctx.service.collect.create(body)
    
            ctx.body = '<h1>添加数据</h1>'
        }
    
        async update() {
             await this.ctx.service.collect.update()
            this.ctx.body = '<h1>修改数据</h1>'
        }
    
        async delete() {
            await this.ctx.service.collect.delete(function(res, err) {
                console.log('ret: ' + res)
            })
            console.log('哈哈哈哈')
            this.ctx.body = '<h1>删除数据</h1>'
        }
    }
    
    module.exports = CollectController;

    router.js


      router.get('/collect',controller.collect.findAll)
      router.post('/create', controller.collect.create)
      router.get('/update', controller.collect.update)
      router.get('/delete', controller.collect.delete)

    接下来,用postman 或者 其他测试软件自己跑一下...

     

     

     

  • 相关阅读:
    webjars管理静态资源
    SpringCloud踩坑日记
    ELK日志搜索平台搭建
    新硬盘挂载到目录后目录原先数据消失解决办法
    nginx安装缺少依赖记录
    SpringCloud踩坑日记
    .bashrc配错刷新导致linux基础命令不能用修复
    nginx超时时间配置
    nginx日志切分shell脚本
    2019.10.10 实习日记
  • 原文地址:https://www.cnblogs.com/zyulike/p/10097391.html
Copyright © 2011-2022 走看看