一.起因
在nodeJs环境中有多种框架比如说大家比较熟悉的express、koa以及今天的主角egg.js。相较于express,如今我更喜欢使用egg.js一些。eggJs的介绍和优劣我就不再这里多嘴了,想要了解的朋友们可以访问egg.js官网,或者查看别的文章自行了解。
因为平常使用的都是已经搭好的骨架,突然发现从零开始搭建egg项目的时候容易迷糊,因此写下本篇文章作为记录,也算是巩固一遍流程。
二.搭建步骤
1.编译环境的准备
想要搭建egg项目首先需要具备nodejs的环境。我们可以在Nodejs的官网下载。(nodejs分为最新版和旧版本,旧版本其实指的是长期维护版,一般来说我会推荐大家使用长期维护版也就是旧版本)
安装完成后在控制台输入node -v 来查看是否成功安装,出现类似如下版本信息代表安装成功
2.安装egg脚手架(可省略)
这里的脚手架与Vue脚手架类似,我们通过在控制台输入指令 npm i egg-init -g 来安装。(一般来说,nodejs版本>8.x,npm版本>=6.1.0可以直接执行初始化项目指令创建egg项目,如果未成功再执行本条指令)
3.初始化项目
在做完前面的准备之后,我们就可以着手于初始化项目了。第一步,我们需要创建一个文件夹作为项目文件夹,例如我在桌面上创建一个EggTest的文件夹。
第二步,我们需要在创建的文件夹(EggTest)中打开控制台或打开控制台切换到文件夹目录中,输入指令 npm init egg -- type=simple 来创建项目。(出现下面的安装界面代表成功运行了egg的脚手架)
我们可以看到,脚手架给我们提供了多种选择(可能时因为--type=simple没有生效),将egg作为我们web项目的后端我们只要选择simple选项就可以了。后续会让我们填写一些项目的信息,大家可以选择性填写,也可以全部默认回车。得到以下的信息便代表项目初始化成功。
接下来在控制台中输入npm i 将依赖下载下来,至此项目的初始化完成。
我们可以在命令行输入 npm run dev ,再打开页面查看项目是否成功部署。(看到hi,egg代表项目成功部署了)
4. 配置数据库
这里我使用的是mysql数据库,同时我使用了sequelize数据库框架。
第一步,安装sequelize的依赖,在控制台或者终端中输入以下指令:
npm i --save egg-sequelize mysql2
第二步,配置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文件暴露出来的内容(方法和数据)。因此最好做到见名知意
文件代码如下:
'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表相关的数据库操作。
文件的内容如下:
'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表相关的业务请求。
文件代码如下:
'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 部署服务器
打开服务器地址,输入查询学生的接口:
可以看到我得到了数据库Boys表中的数据,至此Egg框架初始化项目的搭建完成,希望对大家搭建egg框架迷茫时提供一定的帮助。