少于 1 分钟阅读

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 框架选择,比如常见的 ExpressKoa

控制器(Controller)

在常见的 MVC 架构中,C 即代表控制器,控制器用于负责解析用户的输入,处理后返回相应的结果。 MVC Controller

装饰器(Decorator)模式 的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

  • 路由
  • 路由方法
  • 请求参数
  • 状态码
  • 响应头
  • 重定向
  • 响应类型
  • 优先级

服务和注入

在业务中,只有控制器(Controller)的代码是不够的,一般来说会有一些业务逻辑被抽象到一个特定的逻辑单元中,我们一般称为服务(Service)。 MVC 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 中间件是在控制器调用 之前之后(部分) 调用的函数。 中间件函数可以访问请求和响应对象。 Web 中间件

洋葱圈模型

参考文档

ElasticSearch

标签:

分类:

更新时间: