typescript 如何在NestJS中实现模块类型语法中的函数

yc0p9oo0  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(124)

我是NestJS的新手,所以我很难理解组装一个合适的应用程序结构的基础知识。我知道Nest中的所有东西都是构建在模块化系统上的。但是我不知道如何正确地实现它,也许你们中的一个会告诉我如何正确地实现它。
我正在编写一个计算器应用程序。在客户端,用户编写“expression”字符串。然后,我将此表达式作为请求发送到服务器,在服务器上必须计算表达式并返回结果。

@Controller('/calculator')
export class CalculatorController {
  @Post()
  getResult(@Body() expressionDto: ExpressionDto): CalculationResultDto {
    const { expression } = expressionDto;
    const result = getResult(expression); //here is the problem
    return { expression, result };
  }
}

问题是getResult函数是一堆大函数。所有这些函数都位于utils文件夹中。但这在Nest中是错误的方法,因为所有功能都应该以模块的形式呈现。你能告诉我如何使这些函数正确吗?它们应该存储在哪里,以什么形式?

vlju58qv

vlju58qv1#

在实用程序中使用函数并不一定是“错误”的方法,它并不常见,但这并不意味着它是“错误的”。

  • 我 * 要做的是创建一个CalculatorService类,它包含getResult方法和所有其他方法,这些方法最终将作为类本身的方法调用,可能是私有方法,这取决于是否需要从类外部调用它们,然后让控制器注入服务,并在路由处理程序内部调用this.calculatorService.getResult(expression)

这个类可能类似于

@Injectable()
export class CalculatorService {

  getResult(expression: string): number {
    let result = 0;
    const subExpressions = this.splitToSubExpressions(expression);
    ...
    // call all of the class methods here
    return result;
  }
}

然后你的控制器看起来像这样:

@Controller('/calculator')
export class CalculatorController {
  constructor(private readonly calculatorService: CalculatorService) {}
  @Post()
  getResult(@Body() expressionDto: ExpressionDto): CalculationResultDto {
    const { expression } = expressionDto;
    const result = this.calculatorService.getResult(expression);problem
    return { expression, result };
  }
}

你会有一个模块类,看起来像这样:

@Module({
  controllers: [CalculatorController],
  providers: [CalculatorService],
})
export class CalculatorModule {}

相关问题