前言:
eggjs作为阿里开源的企业级 Node.js 框架,其官网教程https://eggjs.org/zh-cn/tutorials/index.html介绍的很详细,可以帮助初学开发者快速搭建运行eggjs框架。本文主要介绍一些本人对eggjs的学习心得,
也建议初学者从官网教程进行学习,然后找开源项目进行仿照实战。
eggjs框架目录结构
官网的目录结构介绍缺了不少,以下是eggjs框架目录结构。开发者主要使用的app目录进行业务的开发。
egg-project
├── .autod.conf.js【eggjs调用的配置文件】
├── .travis.yml 【travis配置文件】
├── appveyor.yml【appveyor配置文件】
├── .eslintignore 【忽略代码格式化配置文件】
├── .eslintrc 【代码格式化配置文件】
├── package.json【相关依赖模板、版本信息、启动命令配置文件】
├── package_lock.json【node_modules目录下所有模块的具体来源和版本号以及其他的信息】
├── jsconfig.json【VSCODE指定根文件和JavaScript语言服务提供的功能选项】
├── app.js (可选) 【自定义启动时的初始化工作】
├── agent.js (可选) 【自定义agent启动时的初始化工作】
├── logs 【日志目录】
├── node_modules【node模块目录】
├── run【运行时生成的配置文件目录】
├── typings 【智能提示控件】
├── app 【应用层目录】
| ├── router.js 【配置 URL 路由规则文件】
│ ├── controller 【控制器目录】
│ | └── home.js 【用于解析用户的输入,处理后返回相应的结果的文件】
│ ├── service (可选)【服务层目录】
│ | └── user.js 【编写业务逻辑层文件】
│ ├── middleware (可选) 【中间件目录】
│ | └── response_time.js 【中间件文件】
│ ├── schedule (可选)【定时任务目录】
│ | └── my_task.js 【定时任务文件】
│ ├── public (可选) 【静态资源文件】
│ | └── reset.css 【一个css文件】
│ ├── view (可选) 【模板文件目录】
│ | └── home.tpl 【模板文件】
│ └── extend (可选) 【框架的扩展目录】
│ ├── helper.js (可选)【扩展helper对象文件】
│ ├── request.js (可选)【扩展request对象文件】
│ ├── response.js (可选)【扩展response对象文件】
│ ├── context.js (可选) 【扩展ctx对象文件】
│ ├── application.js (可选) 【扩展app对象文件】
│ └── agent.js (可选)【扩展agent对象文件】
├── config 【配置文件目录】
| ├── plugin.js 【插件的配置文件】
| ├── config.default.js 【默认的配置文件】
│ ├── config.prod.js 【prod环境加载的配置文件】
| ├── config.test.js (可选)【test环境加载的配置文件】
| ├── config.local.js (可选)【local环境加载的配置文件】
| └── config.unittest.js (可选)【unittest环境加载的配置文件】
└── test 【单元测试目录】
├── middleware 【中间件单元测试目录】
| └── response_time.test.js 【单元测试文件】
└── controller 【控制器单元测试目录】
└── home.test.js 【单元测试文件】
eggjs架构理解
eggjs作为MVC模型,开发人员主要涉及三个目录下的开发
view 视图 模板 页面的展示
controller 控制器 负责处理一些简单的业务逻辑
service Model数据模型 和数据打交道 处理复杂的业务逻辑
eggjs做为BS架构,流程模式为request-response。
eggjs运行时,用户通过浏览器向eggjs发送请求,eggjs的路由模块router接收请求;
router根据开发者设置的路由规则,将请求发往控制器模块controller具体接口;具体流程如下: