logo头像

aferica

搭建自己API服务器(一):使用egg快速搭建

本文于1715天之前发表,文中内容可能已经过时。

egg是阿里巴巴团队推出的基于Node.js和Koa的为企业级框架和应用
详细文档,了解更多

20190428165355.png

环境要求

  • 操作系统:支持 macOS,Linux,Windows
  • 运行环境:Node建议选择 LTS 版本,最低要求 8.x。

egg项目结构

该目录说明来源中egg文档,具体可查目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

如上,由框架约定的目录:

  • app/router.js 用于配置 URL 路由规则,具体参见 Router

  • app/controller/** 用于解析用户的输入,处理后返回相应的结果,具体参见 Controller

  • app/service/** 用于编写业务逻辑层,可选,建议使用,具体参见 Service

  • app/middleware/** 用于编写中间件,可选,具体参见 Middleware

  • app/public/** 用于放置静态资源,可选,具体参见内置插件 egg-static

  • app/extend/** 用于框架的扩展,可选,具体参见框架扩展

  • config/config.{env}.js 用于编写配置文件,具体参见配置

  • config/plugin.js 用于配置需要加载的插件,具体参见插件

  • test/** 用于单元测试,具体参见单元测试

  • app.jsagent.js 用于自定义启动时的初始化工作,可选,具体参见启动自定义
    由内置插件约定的目录:

  • app/public/** 用于放置静态资源,可选,具体参见内置插件 egg-static

  • app/schedule/** 用于定时任务,可选,具体参见定时任务

若需自定义自己的目录规范,参见 Loader API

  • app/view/** 用于放置模板文件,可选,由模板插件约定,具体参见模板渲染
  • app/model/** 用于放置领域模型,可选,由领域类相关插件约定,如 egg-sequelize

快速搭建API服务框架

方法一:使用我自己搭建的demo

该demo是使用egg + mongodb + jsonwebtoken实现的一个简单的RESTful API服务器模板
具体说明查看项目介绍

1
2
3
4
5
git clone https://github.com/aferica/egg-api-sever
cd egg-api-sever
yarn
npm run dev
open http://localhost:7001/

方法二:使用官方推荐的egg-RESTfulAPI

框架选择:基于 Egg.js 2.0
数据模型:基于 Mongoose 存储
授权验证:基于JWT
内置功能:文件处理,用户系统,统一错误处理及接口返回标准,全方位CRUD,分页,模糊查询的等数据操作Demo
最佳实践:接口设计适配 Ant Design Pro 或 微信小程序开发等。(内置分页及ant接口返回标准)

1
2
3
4
cd app & mkdir public & cd public & mkdir uploads
npm i
npm run dev
open http://localhost:7001/

配置管理

egg框架提供了强大且可扩展的配置功能,可以自动合并应用、插件、框架的配置,按顺序覆盖,且可以根据环境维护不同的配置。合并后的配置可直接从 app.config 获取。

多环境配置

多个环境配置文件,适用于多种环境,方便管理维护

1
2
3
4
config
|- config.default.js // 默认配置文件
|- config.prod.js // 正式环境配置文件
|- config.test.js // 测试配置文件

配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// egg-mongoose配置
config.mongoose = {
url: 'mongodb://127.0.0.1:27017/egg_x',
options: {
useMongoClient: true,
autoReconnect: true,
reconnectTries: Number.MAX_VALUE,
bufferMaxEntries: 0,
},
}
// jwt配置
config.jwt = {
secret: 'Great4-M',
enable: true, // default is false
match: '/jwt', // optional
}
微信打赏

你的赞赏是对我最大的鼓励