Midway - 一个面向未来的云端一体 Node.js
框架
Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架
基础介绍
Midway (中途岛) 是淘系架构团队(前淘宝UED)研发的一款面向未来的的 Node.js 框架。在大规模编程和 Serverless 等多种场景中,Midway 通过 TypeScript 和完全自研的依赖注入能力,将用户体验打造到极致。
Midway 2.0 集成了 Serverless
能力,同时扩展了 RPC、Socket、微服务、前后端一体化研发等能力,不同的场景之间可以组合、协作,给用户提供相对灵活又可靠的使用体验。
概述
Web 框架选择
Midway 设计之初就可以兼容多种上层框架,在 Web 场景默认封装了 Egg.js 作为上层的 Web 框架,同时,Midway 也提供了其他的 Web 框架选择,比如常见的 Express
和 Koa
。
控制器(Controller)
在常见的 MVC 架构中,C 即代表控制器,控制器用于负责解析用户的输入,处理后返回相应的结果。
装饰器(Decorator)模式 的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
- 路由
- 路由方法
- 请求参数
- 状态码
- 响应头
- 重定向
- 响应类型
- 优先级
服务和注入
在业务中,只有控制器(Controller)的代码是不够的,一般来说会有一些业务逻辑被抽象到一个特定的逻辑单元中,我们一般称为服务(Service)。
- 创建服务
- 使用服务
- 注入行为描述
- 注入参数
使用服务
在 Controller 处,我们需要来调用这个服务。传统的代码写法,我们需要初始化这个 Class(new),然后将实例放在需要调用的地方。在 Midway 中,你不需要这么做,只需要编写我们提供的 “依赖注入” 的代码写法。
import { Inject, Controller, Post, Provide, Query } from '@midwayjs/decorator';
import { UserService } from '../service/user';
@Provide()
@Controller('/api/user')
export class APIController {
@Inject()
userService: UserService;
@Get('/')
async getUser(@Query('id') uid) {
const user = await this.userService.getUser(uid);
return {success: true, message: 'OK', data: user};
}
}
Midway 的核心 “依赖注入” 容器会自动关联你的控制器(Controller) 和服务(Service),在运行过程中会自动初始化所有的代码,你无需手动初始化这些 Class。
请求、响应和应用
Midway 框架会根据不同的场景来启动不同的应用,前文提到,我们默认选用 EggJS 作为我们的 Web 框架,也可以使用 Express 或者 Koa。
每个使用的 Web 框架会提供自己独特的能力,这些独特的能力都会体现在各自的 请求和响应(Context)和 应用(Application)之上。
- 上下文和应用定义约定
- 请求和响应
- 应用实例
Web 中间件
Web 中间件是在控制器调用 之前 和 之后(部分) 调用的函数。 中间件函数可以访问请求和响应对象。
参考文档
ElasticSearch
-
[Elasticsearch Guide [7.15] Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/7.15/index.html) - ElasticSearch 7.8.1 从入门到精通 - 陈彦斌 - 博客园
-
[Elasticsearch: 权威指南 Elastic](https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html) -
[《Elasticsearch中文文档》 Elasticsearch 技术论坛](https://learnku.com/docs/elasticsearch73/7.3) - ElasticSearch如何一次查询出全部数据——基于Scroll - CoderBaby - 博客园