egg.js框架 | 青训营笔记

171 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

为什么需要egg.js

监控系统不只是搭建页面,而是一个完整的集中后台数据处理,页面展示,数据持久化的一整套完整生态系统。 不只是需要React来提供页面开发。更多的要关注数据的采集以及中后台对数据的处理,数据落库。所以我们需要一套基于nodejs的后端web框架。

egg介绍

egg 是阿里出品的一款 node.js 后端 web 框架,基于 koa 封装,并做了一些约定。4

比较知名的产品比如Yuque就是用egg开发的。

image.png

如何创建egg项目

$ npm init egg --type=simple //也可以使用cnpm
$ yarn create egg --type=simple //yarn 也可以
$ npm install // yarn 
$ npm run dev // yarn run dev

打开 http://127.0.0.1:7001/ 会看到网页上显示 hi, egg 。即初始化成功

如何使用egg集成数据库

sequelize插件

比较好的集成 MySQL 的方式是借助 ORM 框架来帮助我们管理数据层的代码,sequelize 是当前最流行的 ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多个数据源,接下来我们使用 sequelize 来连接 MySQL 数据库,首先安装依赖:

$ npm install --save egg-sequelize mysql2
$ yarn add egg-sequelize mysql2
  • 在 config/plugin.js 中引入 egg-sequelize 插件
exports.sequelize = {
  enable: true,
  package: 'egg-sequelize',
};
  • 在 config/config.default.js 中编写 sequelize 配置
exports.sequelize = {
  dialect: 'mysql',
  host: '127.0.0.1',
  port: 3306,
  database: 'egg-sequelize-doc-default',
};

我们可以在不同的环境配置中配置不同的数据源地址,用于区分不同环境使用的数据库,例如我们可以新建一个 config/config.unittest.js 配置文件,写入如下配置,将单测时连接的数据库指向 egg-sequelize-doc-unittest

exports.sequelize = {
  dialect: 'mysql',
  host: '127.0.0.1',
  port: 3306,
  database: 'egg-sequelize-doc-unittest',
};

完成上面的配置之后,一个使用 sequelize 的项目就初始化完成了。

项目目录结构

最后记一下一个典型的 egg 项目的目录结构吧:

egg-project
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app
|   ├── router.js
│   ├── controller
│   |   └── home.js
│   ├── service (可选)
│   |   └── user.js
│   ├── middleware (可选)
│   |   └── response_time.js
│   ├── schedule (可选)
│   |   └── my_task.js
│   ├── public (可选)
│   |   └── reset.css
│   ├── view (可选)
│   |   └── home.tpl
│   └── extend (可选)
│       ├── helper.js (可选)
│       ├── request.js (可选)
│       ├── response.js (可选)
│       ├── context.js (可选)
│       ├── application.js (可选)
│       └── agent.js (可选)
├── config
|   ├── plugin.js
|   ├── config.default.js
│   ├── config.prod.js
|   ├── config.test.js (可选)
|   ├── config.local.js (可选)
|   └── config.unittest.js (可选)
└── test
    ├── middleware
    |   └── response_time.test.js
    └── controller
        └── home.test.js

更多的信息可以参考egg.js官网