egg的入门使用

egg是为节省开发成本而生的

     express是node.js使用比较广泛的框架 ,简单并且扩展性强,写比较小的项目比较方便,但是在写比较大的项目时,

他就缺少了规范约定,容易造成开发困难,团队不便于协作,开发人员死蹲点现象;

    于是egg应运而生,egg将后端请求接口进行封装,减少开发人员浪费,团队协作方便,各司其职,开发扩展性极强,

沟通成本大幅度降低,将需要的插件机制优化,实现了一个插件只做一件事,Egg 通过框架聚合这些插件,并根据自己的业

务场景定制配置,这样应用的开发成本就变得很低。

egg拥有以下特性

  • 提供基于 Egg 定制上层框架的能力
  • 高度可扩展的插件机制
  • 内置多进程管理
  • 基于 koa开发,性能优异
  • 框架稳定,测试覆盖率高
  • 渐进式开发

安装方式

npm init egg --type=simple //初始化包
npm i  //将package.json里的包装上
npm run dev //启动项目

使用

  

// app.js
//不管请求
成功与否
module.exports = app => {
//一次worker进程只会调用一次,会将http的server事件暴漏给开发者 app.once(
'server', server => { // websocket });
//在这次进程运行中检测到错误时都会触发,将错误对象和上下文暴漏给开发者,进行自定义的日志记录等处理 app.on(
'error', (err, ctx) => { // report error });
//应用收到请求和响应请求时,分别会触发 request 和 response 事件,并将当前请求上下文暴露出来,开发者可以监听这两个事件来进行日志记录。 app.on(
'request', ctx => { // log receive request }); app.on('response', ctx => { // ctx.starttime is set by framework const used = Date.now() - ctx.starttime; // log total cost }); };
class UserController extends Controller {
  async fetch() {
    this.ctx.body = this.ctx.app.cache.get(this.ctx.query.id);
  }
} //在egg中要获取ctx,是在this上的
//管理者(简单任务分发)
//app/controller/home
async register() {
    // 判断是否已被占用
    const { ctx, service } = this;
    const name = ctx.request.body.name;
    const password = ctx.request.body.password;
    const result = await service.home.checkUser({
      name
    })
    if(result.code === 0) {
      this.ctx.body = result
    } else {
      if(result.isExists) {
        // 已存在
        this.ctx.body = {
          code: 10001,
          msg: '此用户名已被占用'
        }
      } else {
        // 不存在,继续注册
        const registerRes = await service.home.register({name, password})
        ctx.body = registerRes
      }

    }
    console.log('查询结果', result)
    // if(result.isRegister) {
    //   // 没有被注册过
    //   // 写入数据库
    //   await this.service.home.register();
    // } else {
    //   this.ctx.body = {
    //     code: 0,
    //     msg: '已注册'
    //   }
    // }
  }
}
//普通人员(脏活累活,处理数据库等)
//app/service/user
 async checkUser(obj) {
    try {
      const userInfo = await this.app.mysql.query('select * from users where name=?', obj.name);
      return {
        code: 1,
        isExists: userInfo.length > 0,
      };
    } catch (err) {
      return {
        code: 0,
        msg: err.message,
      };
    }
  }
  async register(user) {
    try{
      await this.app.mysql.insert('users', user)
      return {
        code: 1,
        msg: '注册成功'
      }
    } catch(e) {
      return {
        code: 0,
        msg: e.message
      }
    }
  }

post请求(如果直接用会报错)

//config/config.default.js
//学习阶段
//添加
exports.security = {
    csrf: false
};

这样会把判断安全的egg-security插件禁用掉,也就不会向你索要认证头了

如果需要链接数据库的话

$ npm i --save egg-mysql //下载命令

//开启插件

//config/plugin.js

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

//配置

//config/config.default.js

exports.mysql = {
  // 单数据库信息配置
  client: {
    // host
    host: 'mysql.com',
    // 端口号
    port: '3306',
    // 用户名
    user: 'test_user',
    // 密码
    password: 'test_password',
    // 数据库名
    database: 'test',
  },
  // 是否加载到 app 上,默认开启
  app: true,
  // 是否加载到 agent 上,默认关闭
  agent: false,
};

//使用

const user = await this.app.mysql.get('users', { id: 11 });

更多链接  https://eggjs.org/zh-cn/intro/

原文地址:https://www.cnblogs.com/liukuidashen/p/14110850.html