Egg.js入门
发布于 6 个月前 作者 wslongchen 2078 次浏览 来自 分享

前言

本文首发公众号 【一名打字员】

众所周知 JavaScript 的生态圈出了名的好,配套设施完善,所以使用起来特别的顺手。前几次我们介绍了使用 express 来进行简单的微信公众号开发,相信大家都已经了解到使用 node 可以方便快捷的进行开发 web 应用。但是由于阿里系的 egg 框架近期完成了 2.2.0 版本的迭代,让我们看到了他们努力打造的框架中有很多值得学习以及参考的地方,所以【小谱君】团队也在使用 egg 进行整个系统的重构,包括参考 egg 的代码格式规范等等,进行一系列深层次的改造。

今天来安利一下 egg ,通过 egg 快速选择适合对应业务模型的脚手架,快速启动项目的开发。

简介

熟悉的打字员应该知道, egg 现在在社区特别的火爆,官方对它自己的定义是

为企业级框架和应用而生,希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

因为 egg 是基于koa 2x开发的,所以官方还特别强调了与其它两个社区框架 ExpressSails 的差异点

  • Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。
  • Sails 是和 Egg 一样奉行『约定优于配置』的框架,扩展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 这样可扩展的 ORM、前端集成、WebSocket 等,但这些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各种功能插件,比如实现 egg-blueprint,egg-waterline 等这样的插件,再使用 sails-egg 框架整合这些插件就可以替代 Sails 了。

特性

  • 提供基于 Egg 定制上层框架的能力
  • 高度可扩展的插件机制
  • 内置多进程管理
  • 基于 Koa 开发,性能优异
  • 框架稳定,测试覆盖率高
  • 渐进式开发

个人比较喜欢的地方就是其可扩展性特别高,而且作为特别喜欢渐进式开发的打字员来说,不要太友好唷。而且是熟悉 Web 开发或 MVC 模式开发的童鞋的福音,因为在这里你能看到自己熟悉的controller和service,开发起来棒棒哒。

快速开始

怎么快速的用 egg 快速的进行开发呢,我们选择使用其官方提供的内置脚手架,推荐egg-init

  • 创建项目

首先安装 eggnpm i egg-init -g), 然后初始化项目 egg-init egg-example --type=simple

  • 目录结构

进入生成的 egg-example 目录,其结构如下:

egg-example ├── package.json(配置文件) ├── app | ├── router.js(路由文件) │ ├── controller │ | └── home.js(用户控制层) ├── config | ├── plugin.js(插件配置) | ├── config.default.js(默认配置) └── test └── app └── controller └── home.test.js(测试文件)

安装依赖之后我们就能够运行 npm run dev 在本地查看了。

image.png

在图中我们可以看到,程序已经正常的在本地跑了起来,打印出当前使用的版本以及当前的 agent_worker 并监听了7001这个端口。关于 agentworker以及 master 的详细不在这里具体介绍,有兴趣的童鞋可以移步官网。

  • 编写程序

接下来我们就能在 controller 编写自己的业务逻辑代码了,为了保持 Controller```` 中的逻辑更加简洁,官方推荐增加service层,什么是Service呢,相信很多同学对它还很陌生,简单来说,Service就是在复杂业务场景下用于做业务逻辑封装的一个抽象层。同时把业务逻辑进行封装之后还可以保持业务逻辑的独立性,抽象出来的Service可以被多个Controller``` 重复调用。并且将逻辑和展现分离,更容易编写测试用例。

这样一来,是否可以将之前写的微信公众号系统进行重构呢,在代码和整个架构上进行一个规范,赶紧动动手吧。

结语

国内前端优秀的开发团队还有很多,但是阿里算是做的比较好的,至少他家的文档让我整体看来很舒服,而且逐渐把前端的一些概念开始扩展,融入了一些后端的思想。想想还有特别火热的 RxJs 系列,看来未来前端依旧会走在时尚的前流。

另外在学习的过程中发现问题我们可以给 egg 团队提 issue 的哇,或者有更好的解决方案可以提交 PR ,万一被合并了,这牛也可以吹半辈子了哈。

传送门

9 回复

赞,但下面怎么没了?

赞👍🏻 From Noder

@atian25 10086一起撸代码啊

@thonatos 我这里有一本《全干秘籍》要不要一起修炼

可以多读读源码, 后续自己可以基于 koa 实现一个类似的框架!

@atian25 本职java狗,业余钻研一下node,刚接触egg没多久,结合egg改造自身系统中,希望大神多多指教和交流哇。(☄⊙ω⊙)☄

回到顶部