Egg.js学习笔记(二)


一、数据库(Sequelize)

安装

npm install --save egg-sequelize mysql2

配置

plugin.js中引入

sequelize:{
    enable:true,
    package:'egg-sequelize'
},

配置config.default.js

config.sequelize = {
  dialect:'mysql',
  database:"school_system",
  host:'localhost',
  port:3306,
  username:'root',
  password:'123456'
};

Mysql和sequelize数据类型对应关系

STRING => varchar(255)
INTEGER => int
DOUBLE => double
DATE => datetime
TEXT => text

创建表

在app/model目录下创建clazz.js,对应clazz表

module.exports = app =>{
    const {STRING} = app.Sequelize;
    const Clazz = app.model.define('clazz',{
        //自动生成id
        name:STRING,
    })

    return Clazz;
}

在根目录下创建app.js

module.exports = app =>{
    app.beforeStart(async function() {
        //sync方法会根据模型创建表
        await app.model.sync({});
    });
};

增删查改

async create(){
        let name = this.ctx.request.body.name;
        await this.app.model.Clazz.create({
            name:name
        })
        this.ctx.body = "添加成功"
    }

async destroy(){
        let id = this.ctx.params.id;
        await this.app.model.Clazz.destroy({
            where:{
                id:id
            }
        })
        this.ctx.body = "删除班级数据"
    }

async index(){
        let id = this.ctx.request.query.id;
        let clazzList = await this.app.model.Clazz.findAll({
            where:{
                id:id
            }
        });
        this.ctx.body = clazzList;
    }

async update(){
        let id = this.ctx.params.id;
        let name = this.ctx.request.body.name
        await this.app.model.Clazz.update({name:name},{
            where:{
                id:id
            }
        })
        this.ctx.body = "修改成功"
    }

一对多关系

例如学生和班级
先定义学生模型,在model下新建student.js

module.exports = app =>{
    const {STRING} = app.Sequelize;
    const Student = app.model.define('Student',{
        //自动生成id
        name:STRING,

    })
    //所属哪个班级,指向班级主键
    Student.associate = function() {
        app.model.Student.belongsTo(app.model.Clazz,{
            foreignKey:'clazz_id',
            as:'clazz'
        })
    }

    return Student;
}

async create(){
        let name = this.ctx.request.body.name;
        let clazz_id = this.ctx.request.body.clazz_id;
        await this.app.model.Student.create({
            name:name,
            clazz_id:clazz_id
        })
        this.ctx.body = "添加成功"
    }

二、Service(服务层)

在app/service目录下创建js文件

//增加了异常处理
const {Service} = require("egg");

class StudentService extends  Service{
    async getStudentList(){
        try{
            let studentList = await this.app.model.Student.findAll();
            return studentList;
        }catch(e){
            return null;
        }
        
    }
}

module.exports = StudentService;

/controller/student.js

async index(){
        let list = await this.ctx.service.student.getStudentList();
        if(list){
            this.ctx.body = {
                code:1,
                data:list
            };
        }else{
            this.ctx.body = {
                code:0,
                msg:"服务器异常,请与管理员联系"
            }
        }
    }

总结

controller层获取用户输入,使用service层操作数据库

三、实际开发中的问题

请求的url

在vue项目根目录下创建 .env.development 文件

VUE_APP_BASE_API = "http://127.0.0.1:7001"

在vue项目的src目录下新建utils文件夹,新建request.js

import axios from "axios";
const request = axios.create({
    baseURL:process.env.VUE_APP_BASE_API
})
export default request;

vue文件不在引入axios,而引入request.js文件

import request from "../utils/request"
//axios.get('http://127.0.0.1:7001/login')
request.get(`/login`)

token

将token放在封装的request.js中

import axios from "axios";
const request = axios.create({
    baseURL:process.env.VUE_APP_BASE_API
})

//拦截器
request.interceptors.request.use((req)=>{
    let token = localStorage.getItem("token");
    if(token){
        req.headers.token = token;
    }
    return req
})

export default request;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值