egg初体验

egg初体验

一、框架介绍、安装

1. egg的个人理解

  • koa官网,官网中国呢的文档还是挺详细的
  • 之前接触过nodejs的话很容易上手,只是框架不同写法上有区别而已。
  • egg就是一个框架,做了一些封装,从 koa 发展过来,写法上都大同小异,个人使用过感觉 egg 写起来更加方便。

2. 安装

跟着官网安装就好了,官网很详细,可以是用快速初始化,也可以跟着官网一步一步搭出框架,新手我建议还是逐步搭建比较好,可以了解框架结构,对框架理解回跟深入

  • egg快速入门
  • 官网逐步搭建的时候,你可能会不知道应该在那个地方创建文件,在那个地方创建文件夹,这个时候看一下完整的的目录结构就全清楚了。

二、controller

  • 输出hello word

    js 复制代码
    'use strict';
    
    const { Controller } = require('egg');
    
    class HomeController extends Controller {
      async index() {
        const { ctx } = this;
        ctx.body = 'hi, egg';
      }
    }
    
    module.exports = HomeController;
  • 访问文件,具体文件操作可以看这两个文章,node-file案例,node-file文件处理方法

    js 复制代码
    'use strict';
    
    const { Controller } = require('egg');
    const fsp = require('fs').promises;
    
    class TestController extends Controller {
      async index() {
        const { ctx, config } = this;
    
        const fileContent = await fsp.readFile(config.static.dir + '/test.xlsx', 'utf8');
    
        const editContent = await fsp.writeFile(config.static.dir + '/test.xlsx', 'test1');
    
        ctx.body = fileContent;
      }
    }
    
    module.exports = TestController;
  • 调用外部接口

    js 复制代码
      'use strict';
    
      const { Controller } = require('egg');
      const fsp = require('fs').promises;
    
      class TestController extends Controller {
        async index() {
          const { ctx, config } = this;
          // 这里我用的在线mock工具,随便找一个在线mock工具就行
          const result = await ctx.curl('https://mock.presstime.cn/mock/6520f61af82aa50021bbdc40/example/test', {
            dataType: 'json',
          });
    
          const res = result.data.data.records.reduce((pre, item) => {
            return (pre += `<div>${item.qualificationName}</div>`);
          }, '');
    
          ctx.body = res;
        }
      }
    
      module.exports = TestController;

数据库

  • 连接mysql需要用到插件 egg-mysql,参考官网-教程-MySQL

  • 注意:

    • 开启插件需要放在 plugn.js 中,这块官网写的确实不是很细,给初学者很不友好,这里我刚开始按照官网直接配置有问题,数据库就连不上。

      js 复制代码
        module.exports = {
          mysql: {
            enable: true,
            package: 'egg-mysql',
          }
        };
    • 配置数据源也不能按照官网的来,和上面一样,我卡了挺久,查了好久资料。配置完这两步,就可以开始crud了。

      js 复制代码
        module.exports = appInfo => {
          /**
           * built-in config
           * @type {Egg.EggAppConfig}
           **/
          const config = exports = {
            mysql: {
              client: {
                // host
                host: '',
                // 端口号
                port: '',
                // 用户名
                user: '',
                // 密码
                password: '',
                // 数据库名
                database: '',
              },
              // 是否加载到 app 上,默认开启
              app: true,
              // 是否加载到 agent 上,默认关闭
              agent: false,
            }
          };
      
          // use for cookie sign key, should change to your own and keep security
          config.keys = appInfo.name + '_123456';
      
          // add your middleware config here
          config.middleware = [];
      
          // add your user config here
          const userConfig = {
            // myAppName: 'egg',
          };
      
      
          return {
            ...config,
            ...userConfig,
          };
        };
  • 使用 server 层中连接数据库,返回数据,controller 中做逻辑处理。按照官网的步骤做就好了。

相关推荐
程序员老王wd18 小时前
node - gyp` 版本过低可能会和当前的 Node.js 版本不兼容
node.js
m0_7482556518 小时前
从零开始在Windows系统上搭建一个node.js后端服务项目
windows·node.js
田猿笔记18 小时前
Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比
开发语言·javascript·node.js
真的很上进19 小时前
【1.8w字深入解析】从依赖地狱到依赖天堂:pnpm 如何革新前端包管理?
java·前端·vue.js·python·webpack·node.js·reactjs
念九_ysl19 小时前
Node.js 版本与 npm 的关系及版本特性解析:从开源项目看演进
npm·开源·node.js
郁大锤21 小时前
NPM如何更换淘宝镜像——Node.js国内镜像配置教程
前端·npm·node.js
天马37981 天前
vue2老版本 npm install 安装失败_安装卡主
前端·npm·node.js·vue2
m0_748241121 天前
Node.js使用教程
node.js·编辑器·vim
m0_748249541 天前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
不想秃头i1 天前
node.js + html调用ChatGPTApi实现Ai网站demo(带源码)
前端·javascript·vue.js·人工智能·vscode·node.js·html