NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 构建,并结合了面向对象编程(OOP)、函数式编程(FP)和响应式编程(FRP)的元素。装饰器是 TypeScript 的一个特性,允许你在不修改类或方法源代码的情况下,为其添加额外的功能或元数据。
自定义装饰器是一种特殊类型的声明,可以附加到类声明、方法、访问器、属性或参数上。它们通过 @expression
的形式使用,其中 expression
必须是一个函数,该函数将在运行时被调用,并带有关于被装饰的声明的信息。
当自定义装饰器返回 undefined
时,通常是因为装饰器函数没有正确地返回期望的值。这可能是由于多种原因造成的,比如装饰器逻辑错误、错误的返回类型或未处理的异常。
以下是一个简单的示例,展示如何创建一个自定义装饰器,并确保它正确返回值:
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const CustomDecorator = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
// 假设我们要从请求头中获取一个值
const value = request.headers['x-custom-header'];
if (value) {
return value; // 确保返回期望的值
}
return undefined; // 如果没有找到值,返回 undefined
},
);
自定义装饰器在 NestJS 中有多种应用场景,例如:
以下是一个使用自定义装饰器的示例:
import { Controller, Get, UseGuards } from '@nestjs/common';
import { CustomDecorator } from './custom.decorator';
@Controller('example')
export class ExampleController {
@Get()
getExample(@CustomDecorator() customValue: string): string {
return `Custom value is: ${customValue}`;
}
}
通过以上步骤,你可以确保自定义装饰器正确返回值,并避免返回 undefined
的问题。
领取专属 10元无门槛券
手把手带您无忧上云