serveless 思想 Midway.js 框架使用教程

简介: serveless 思想 Midway.js 框架使用教程

依赖注入作用域


默认的未指定或者未声明的情况下,所有的 @Provide 出来的 Class 的作用域都为 请求作用域。这意味着这些 Class ,会在每一次请求第一次调用时被实例化(new),请求结束后实例销毁。我们默认情况下的控制器(Controller)和服务(Service)都是这种作用域。


Midway 的依赖注入体系中,有三种作用域。


微信图片_20230204201557.png

不同的作用域有不同的作用,单例 可以用来做进程级别的数据缓存,或者数据库连接等只需要执行一次的工作,同时单例由于全局唯一,只初始化一次,所以调用的时候速度比较快。而 请求作用域 则是大部分需要获取请求参数和数据的服务的选择,原型作用域 使用比较少(所以此处不做介绍),在一些特殊的场景下也有它独特的作用。


配置作用域 @Scope


如果我们需要将一个对象定义为其他两种作用域,需要额外的配置。Midway 提供了 @Scope 装饰器来定义一个类的作用域。下面的代码就将我们的 user 服务变成了一个全局唯一的实例。


// service
import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';
@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {
  //...
}


单例作用域


在显式配置后,某个类的作用域就可以变成单例作用域。


// service
import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';
@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {
  //...
}


后续不管获取这个类的实例多少次,在 同一个进程下,都是同一个实例。


比如基于上面的单例服务,下面两个注入的 userService 属性是同一个实例:


@Provide()
export class A {
  @Inject()
  userService: UserService
  //...
}
@Provide()
export class B {
  @Inject()
  userService: UserService
  //...
}


请求作用域


默认情况下,代码中编写的类均为 请求作用域


在每个协议入口框架会自动创建一个请求作用域下的依赖注入容器,所有创建的实例都会绑定当前协议的上下文。


比如:


●http 请求进来的时候,会创建一个请求作用域,每个 Controller 都是在请求路由时动态创建

●定时器触发,也相当于创建了请求作用域 ctx,我们可以通过@Inject()ctx可以拿到这个请求作用域。


所以在请求作用域中,我们可以通过 @Inject() 来注入当前的 ctx 对象。


import { Controller, Provide, Inject } from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';
@Provide()  // 实际可省略
@Controller('/user')
export class UserController {
  @Inject()
  ctx: Context;
  //...
}


我们的 @Inject 装饰器也是在 当前类的作用域 下去寻找对象来注入的。比如,在 Singleton 作用域下,由于和请求不关联 ,默认没有 ctx 对象,所以注入 ctx 是不对的 。


@Provide()
@Scope(ScopeEnum.Singleton)
export class UserService {
  @Inject()
  ctx;                              // undefined
  //...
}


安装调试工具


20c63d351f9948079704c63f144ae42c.png


输入命令yarn dev,在需要debugger的位置打上断点


8aa00db5734b44f28b259b5a509046bf.png


Postman 中请求接口,可以看到代码执行到断点位置


1.png



目录
相关文章
|
6天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
1月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
29天前
|
JavaScript 前端开发 API
Vue.js:现代前端开发的强大框架
【10月更文挑战第11天】Vue.js:现代前端开发的强大框架
64 41
|
12天前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
34 4
|
19天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
39 1
|
7天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
9天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
17 0
|
1月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
31 4
|
1月前
|
JSON JavaScript 前端开发
Node.js Express 框架
10月更文挑战第7天
27 2
|
1月前
|
JavaScript 前端开发 API