zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    [转载]--python3.6 错误: ModuleNotFoundError:No module named "Crypto"
    [笔记]--RedHat6.5使用CentOS的yum源
    [笔记]--Linux公社,想要的都在里面
    [笔记]--vsftpd配置教程
    Vue 中 axios 配置使用
    Element-ui自定义主题换肤
    vue-cli项目打包需要修改的路径问题
    cookie和session 以及 localStorage和sessionStorage之间的区别和应用场景
    正则表达式
    详解-vue项目中的文件和目录
  • 原文地址:https://www.cnblogs.com/liukuidashen/p/14110850.html
Copyright © 2011-2022 走看看