egg入门指引,你绝对用得到
较为熟悉的web开发框架如:express,koa作为经典的node技术应用,曾经是node开发的不二之选,但有没有更灵活更可靠的框架作为代替呢?答案就是egg .
阿里是最早一批使用Node.JS做基础技术支撑的公司,Node的出现让php/java的模式出现了被代替的可能,直到egg的1.0版本上线,这种模式变成了Node/java。作为一款定位为:『企业级的
web 基础框架』,他的出现坚决不是为了阿里的KPI,而是作为阿里 Node.js 应用的核心基础设施而诞生。
一、Egg与其他框架的对比:
与koa的对比:
Koa 由 Express 幕后的原班人马打造,设计初衷是抛掉express中不合时宜的回调以及引入更加强大的async/await机制和插件、中间件机制,目的是用更小的体积和更优雅的语法产生更快速的web服务端。
但对于面向企业级的应用框架来说,这还远远不够,多人协作的开发模式应以约定大于配置的形式来确保开发过程中产生更小的沟通成本,更高效的编码效率。而这也是egg最核心的东西。
egg带有一套自身的约定和规范,我们来看一下,用egg产生的工程目录。
这是一个非常简明的目录层级,app中包含了整个项目的业务逻辑和视图层,其中包括了如下:middleware、controller、model、router、service等,这些层级文件不会出现像其他框架那样让人头大的目录。相反这种结构用更清晰的方式为码农的世界增加了一丝清爽。
看一下app下的约定规范:
二、如何构建一个egg工程
1、安装node环境
运行环境:建议选择 LTS 版本,最低要求 8.x。
2、创建文件夹
可以手动创建,也可以使用命令行。
mkdir egg-example && cd egg-example
3、初始化egg工程
npm init egg --type=simple
然后可以看到:
4、执行依赖安装
npm i
5、启动项目
npm run dev
至此一个简单的egg工程就创建完毕了。
三、如何使用egg链接数据库
eggs链接数据库的方法,这里介绍两种:mongo和mysql。egg没有内置的数据库链接方法,我们需要引入第三方插件,而egg对于插件的支持也有非常强大的能力。
1、egg链接mongo数据库
mongo数据库在egg的链接中,用到的是:egg-mongo-native
使用方法:
- 安装
npm i egg-mongo-native --save
- 插件文件里面启用插件
找到{app_root}/config/plugin.js
exports.mongo = {
enable: true,
package: ‘egg-mongo-native’
};
- config.default.js 中配置数据库
// {app_root}/config/config.default.js
exports.mongo = {
client: {
host: 'host',
port: 'port',
name: 'test',
user: 'user',
password: 'password',
options: {}, }
}
端口号和主机名需要根据实际情况自行配置;mongo的主机一般是localhost,端口号是27017
4. 简单介绍一下具体的应用:
查找:
let result=await this.app.mongo.find('order');
let result=await this.app.mongo.find('cate',{query:{"name":zhangsan"});
增加:
let result = await this.app.mongo.insertOne('cate', {doc:{"title":"分类"}});
修改:
const result = await this.app.mongo.findOneAndUpdate('cate', { filter:{"title":"分类"}, update:{$set:{"title":"11"} } });
删除:
const result = await this.app.mongo.findOneAndDelete('cate', {filter:{"title":"1111"}})
实际开发中我们会有一些工具,便捷的操作数据库和对数据进行增删改查。
比如 mongones.
2、egg链接mysql数据库
egg链接mysql的插件 egg-mysql
使用方法:
- 安装
npm i --save egg-mysql
- 插件文件里面启用插件
找到{app_root}/config/plugin.js
exports.mysql = {
enable: true,
package: ‘egg-mysql’,
};
- config.default.js 中配置数据库
// {app_root}/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 post = await this.app.mysql.get('posts', { id: 12 });
查找条件限制:
const results = await this.app.mysql.select('posts', { // 搜索 post 表
where: { status: 'draft', author: ['author1', 'author2'] }, // WHERE 条件
columns: ['author', 'title'], // 要查询的表字段
orders: [['created_at','desc'], ['id','desc']], // 排序方式
limit: 10, // 返回数据量
offset: 0, // 数据偏移量
});
增加:
const result = await this.app.mysql.insert('posts', { title: 'Hello World' });
修改:
const result = await this.app.mysql.update('posts', ‘hi’);
删除:
const result = await this.app.mysql.delete('posts', {
author: 'fengmk2',
});