Egg 的插件机制有很高的可扩展性,一个插件只做一件事(比如 Nunjucks 模板封装成了 egg-view-nunjucks、MySQL 数据库封装成了 egg-mysql)。Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,这样应用的开发成本就变得很低。
Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。使用 Loader 可以让框架根据不同环境定义默认配置,还可以覆盖 Egg 的默认约定。
egg官网:https://eggjs.org/zh-cn/intro/index.html
egg使用流程
- 新建文件夹,在终端打开(文件夹名为英文)
- 输入命令 npm init egg --type=simple
- npm i 下载node-modeles依赖包
- npm run dev 启动egg项目
- 下载egg-mysql插件,准备连接数据库
- 在config文件夹下,找到plugin.js文件,在 module.exports={ } 大括号中输入
mysql:{
enable:true,
package:'egg-mysql',
},
- 在config文件夹下,找到config.default.js文件,在 const userConfig={ } 大括号中输入
// 连接数据库
mysql:{
// 单数据库信息配置
client:{
// host
host:'localhost',
// 端口号
port:'3306',
// 用户名
user:'root',
// 密码
password:'root',
// 数据库名
database:'sql数据库名'
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
},
// 关闭代码检测
security : {
csrf: false
},
- 在ap文件夹中写自己的代码逻辑
- 在app文件夹下,找到router.js文件,在这个文件中写接口 (以下代码是些常用接口,增,删,改,查)
// 查找接口 * 查
router.get('接口1',controller.文件夹1.函数1);
// 新增接口 * 增
router.post('接口2',controller.文件夹2.函数2);
// 编辑接口 * 改
router.put('接口3',controller.文件夹3.函数3);
// 删除接口 * 删
router.delete('接口4',controller.文件夹4.函数4);
- 在app文件夹下,新建文件夹 service (文件夹名必须为service) 用来和数据库连接
- 在service文件夹下,新建文件
文件夹1.js
// 查找中需要条件就写不需要就不用写 xxx为条件参数
async 函数1(xxx){
return await this.app.mysql.query('select * from 表名 where(条件) xxx',[xxx]);
}
文件夹2.js
// t1,t2为参数 添加内容的项目名
async 函数2(t1,t2){
await this.app.mysql.query('insert into 表名 (t1,t2) value (?,?)',[t1,t2]);
}
文件夹3.js
// 通过id确定要编辑那个 q1,q2编辑的项目
async 函数3(q2,q4,id){
await this.app.mysql.query('update 表名 set q2=?,q4=? where(条件) id=?',[q2,q4,id]);
}
文件夹4.js
async 函数4(id){
await this.app.mysql.query('delete from 表名 where(条件) id=?',[id]);
}
在react中使用:
- 在package.json文件中输入 "proxy":"egg启服务后生成的地址"