egg.js使用指南

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了egg.js使用指南相关的知识,希望对你有一定的参考价值。

参考技术A

官方教程 有点跳跃,很多东西没讲清楚,不太适合小白理解,特此整理、归纳一下。
打开这篇博客的正确方式是:先读一遍 官方教程 ,读不懂的可以略过,然后再带着问题来看这篇文章。然后再回去读官方文档,去理解。最终目的是理解官方文档,我的文章并不权威,只是起到帮助理解文档的作用。

答案:功能更丰富、更规范的koa
使用koa时,你要写一个项目,要往里面加很多中间件,要写脚本加载routes文件夹下面的所有路由以及model文件夹下面的所有sequelize模型,koa仅仅是一个骨架,其他的都是你来完成,自由度高,但集成度低,每创建一个新项目都要做很多重复工作。egg.js是封装了一套koa,可以理解成大礼包版koa,集成度高,可以轻松创建一个项目而不用做很多繁琐的初期工作,解放生产力,更可贵的是有一套现成的规范提供给我们,不需要我们自己再去探索一套规范,比如router放哪里,controller放哪里,需不需要service,哪些放在service等等。

根据egg.js 目录结构 先了解其项目规范,为了了解这些目录/文件是做什么,先从我们最熟悉的request讲起:

在进行下面的阅读前请保证已经理解了egg.js中的 内置对象 。
内置对象可以被方便地获取到,不过功能有限,我们可以通过egg.js的扩展(Extend)功能去进一步加强、定制框架的能力。
egg.js中有非常多新鲜的特性:“扩展”、“插件”、“多环境配置”,这些特性名称虽然不一样,但本质都是一样的:有则覆盖,无则增加。类似于 lodash中的defaults函数 ,也类似于继承。
因此,如果我们想扩展Application对象,根据egg.js规范,应该在projectDir/app/extend/下增加application.js:

以后就可以方便地调用 app.specialName 获取这个值。

Extend特性可以扩展上层框架的内置对象,而 插件 则可以扩展除router和controller之外的整个app。插件拥有自己的package.json,因此可以独立发布到npm,每个人都可以install,享用你的扩展。
如果我要为项目写一个管理微信公众号的功能,我会写一个WxService:

很多项目都可以用到这个Service,因此我会提取为一个插件,然后通过引入插件的形式去引入,我在应用中同样可以调用这个Service,等于是把插件中的文件往应用中复制了一份,和写在应用中没什么两样。
关于如何提取插件,请参见: 渐进式开发

定制自己的框架可以确定项目的技术选型、减少项目初期的工作,定制框架的思想其实和扩展内置对象、开插件是一样的,但是前置工作会比较多一些,参见: egg.js框架开发 。
这些前置工作比较重复、有固定格式,没有必要自己写,建议用骨架搭建。

当我们基于自己定制的框架framework1,并且在应用中依赖了插件plugin2、plugin3,开发了一个应用:

其中framework1直接基于egg并且内置了plugin1,此时整个app的加载顺序是怎样的呢?
加载原则总结一句话是:从被依赖到依赖。

先来分析一下,谁被依赖,谁依赖:

为了最大程度利用多核、增强Node进程健壮性,一般我们会使用PM2一类的工具,如果使用egg.js,就完全不需要担心了,egg利用cluster模块( 了解cluster原理请看这篇文章 )已经创建了一个非常稳定的多进程模型。

egg.js入门导航:安装使用与学习

文章目录

egg安装与使用

全局切换镜像:

npm config set registry https://registry.npm.taobao.org

我们推荐直接使用脚手架,只需几条简单指令,即可快速生成项目(npm >=6.1.0):

mkdir egg-example
cd egg-example
npm init egg --type=simple --registry https://registry.npm.taobao.org

其中:type选项有下面选值

骨架类型说明
simple简单 egg 应用程序骨架
empty空的 egg 应用程序骨架
pluginegg plugin 骨架
frameworkegg framework 骨架

安装过程会出现填写项目名作者等信息,可以自定义,也可以回车默认

再运行下面语句

npm i

启动项目:

npm run dev

出现这个就是成功了

访问:http://localhost:7001

egg学习

官网:https://www.eggjs.org/zh-CN

官方文档:https://www.eggjs.org/zh-CN/tutorials

API文档(英文):https://www.eggjs.org/api/index.html

以上是关于egg.js使用指南的主要内容,如果未能解决你的问题,请参考以下文章

egg.js连接和使用Mongodb

egg.js入门导航:安装使用与学习

node egg.js使用superagent做文件转发

egg.js使用superagent做文件转发

Egg.js 项目中怎么使用前端模板

egg.js 24.1创建egg.js项目