【问题标题】:How to implement functions in module type syntax in NestJS如何在 NestJS 中以模块类型语法实现功能
【发布时间】:2023-02-08 01:30:59
【问题描述】:
我是新来的嵌套所以我很难理解将适当的应用程序结构组合在一起的基础知识。我知道 Nest 中的所有内容都是构建在模块化系统上的。但我不知道如何正确实施,也许你们中的一个人会告诉我如何正确实施。
我正在编写一个计算器应用程序。在客户端,用户编写“表达式”字符串。此外,我将这个表达式作为请求发送到服务器,并且在服务器上必须计算表达式并返回结果。
@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 中这是错误的做法,因为所有的功能都应该以模块的形式呈现。你能告诉我如何使这些功能正确吗?它们应该存放在哪里,以什么形式存放?
【问题讨论】:
标签:
typescript
rest
nestjs
react-fullstack
【解决方案1】:
它不一定是错误的方法,在实用程序中具有功能。这并不常见,但这并不意味着它是“错误的”。
什么我要做的是创建一个 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 {}