[记录]EggJs初始化项目

564 阅读4分钟

一.起因

    在nodeJs环境中有多种框架比如说大家比较熟悉的express、koa以及今天的主角egg.js。相较于express,如今我更喜欢使用egg.js一些。eggJs的介绍和优劣我就不再这里多嘴了,想要了解的朋友们可以访问egg.js官网,或者查看别的文章自行了解。

    因为平常使用的都是已经搭好的骨架,突然发现从零开始搭建egg项目的时候容易迷糊,因此写下本篇文章作为记录,也算是巩固一遍流程。

二.搭建步骤

  • 1.创建egg项目

        想要搭建 egg项目首先需要具备nodejs的环境。我们可以在Nodejs的官网下载。(nodejs分为最新版和旧版本,旧版本其实指的是长期维护版,一般来说我会推荐大家使用长期维护版也就是旧版本)

image.png   安装完成后在控制台输入node -v 来查看是否成功安装,出现类似如下版本信息代表安装成功

image.png

  •  2.安装egg脚手架(可省略)

    这里的脚手架与Vue脚手架类似,我们通过在控制台输入指令 npm i egg-init -g 来安装。(一般来说,nodejs版本>8.x,npm版本>=6.1.0可以直接执行初始化项目指令创建egg项目,如果未成功再执行本条指令)

image.png

  3.初始化项目

       在做完前面的准备之后,我们就可以着手于初始化项目了。第一步,我们需要创建一个文件夹作为项目文件夹,例如我在桌面上创建一个EggTest的文件夹。

image.png

       第二步,我们需要在创建的文件夹(EggTest)中打开控制台或打开控制台切换到文件夹目录中,输入指令 npm init egg -- type=simple 来创建项目。(出现下面的安装界面) image.png

      我们可以看到,脚手架给我们提供了多种选择(可能时因为--type=simple没有生效),将egg作为我们web项目的后端我们只要选择simple选项就可以了。后续会让我们填写一些项目的信息,大家可以选择性填写,也可以全部默认回车。得到以下的信息便代表项目初始化成功。

image.png       接下来在控制台中输入npm i 将依赖下载下来,至此项目的初始化完成。

image.png

      我们可以在命令行输入 npm run dev ,再打开页面查看项目是否成功部署。

image.png

image.png

  4. 配置数据库

        这里我使用的是mysql数据库,同时我使用了sequelize数据库框架。

         第一步, 安装sequelize的依赖,在控制台或者终端中输入指令

          npm i --save egg-sequelize mysql2。

image.png

      第二步,配置sequelize。在** config/plugin.js  config.default.js 分别添加内容如下:

① plugin.js

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

② config.default.js

  config.sequelize = {
    dialect: 'mysql', // 连接的数据库类型
    host: '127.0.0.1', //连接的主机地址
    username: 'root', //数据库用户名
    password: 'root', //数据库密码
    port: 3306, //数据库端口
    database: 'learn-mysql', //数据库的名称
    timezone: '+08:00', // 将时区转为中国时区
    pool: {
      //连接池配置(可省略)
      max: 5,
      min: 0,
      idle: 10000,
    },
    define: {
      freezeTableName: true, //是否允许自定义表名
      timestamps: false,  //是否关闭默认时间戳
      // createdAt: 'created_at',
      // updatedAt: 'updated_at',
    },
  };

      第三步,创建sequelize模型,在app文件夹下新建model文件夹用来存放sequelize的模型。注意文件的命名,在egg的操作中类似java的导包(ctx.model.boys.boys)就可以访问到boys.js文件暴露出来的内容(方法和数据)。因此最好做到见名知意

image.png

文件代码如下:

'use strict';

module.exports = (app) => {
  const { DataTypes } = app.Sequelize;
  const Boys = app.model.define('boys', {
    boy_name: {
      type: DataTypes.STRING,
    },
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true, //是否为主键
      autoIncrement: true, //是否自动增长
    },
  });
  return Boys;
};

    第四步,完成了模型的简单配置,我们就可以去处理业务层的内容,首先在Service中定义一个BoyService.js文件,专门处理Boys表相关的数据库操作。

image.png

     文件的内容如下:

'use strict';

const {Service} = require('egg');

class BoyService extends Service {
  async getAllBoysInfo() {
    const { ctx } = this;
    try {
      return await ctx.model.Boys.Boys.findAll();
    } catch (error) {
      console.log(error); // 用来查看报错信息
    }
  }
}
module.exports = BoyService;

       第五步, Controller文件夹中配置一个BoyController来处理,Boys表相关的业务请求。

image.png

   文件代码如下:

'use strict';

const { Controller } = require('egg');

class BoysController extends Controller {
  async getBoysInfo() {
    const { ctx } = this;
    try {
      const Boys = await ctx.service.boys.boyService.getAllBoysInfo();
      ctx.body = { Boys };
    } catch (error) {
      console.log(error);
    }
  }
}
module.exports = BoysController;

    第六步,配置路由:在router中新加查询学生信息的路由

        代码如下:

'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = (app) => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
  router.get('/getAllBoys', controller.boys.boysController.getBoysInfo);
};

三.测试

        完成了上述的一系列操作,到了验收的时候。我们先使用 npm run dev 部署服务器

image.png

        打开服务器地址,输入查询学生的接口:

image.png    可以看到我得到了数据库Boys表中的数据,至此Egg框架初始化项目的搭建完成,希望对大家搭建egg框架迷茫时提供一定的帮助。