我想启用Swagger接口,在Nx中NestJS和角应用程序之间共享。有没有一个一致的,而不是一个解决办法?
以下是我尚未成功的方法:
方法1.将@nestjs/swagger装饰器应用于共享的DTO类
npx create-nx-workspace@latest创建一个新的Nxangular-nest工作区蓝图Message中添加app.component.ts类型的输入(只用于测试,没有意义):export class AppComponent {
@Input() message: Message;
hello$ = this.http.get<Message>('/api/hello');
constructor(private http: HttpClient) {}
}message中用ApiProperty()装饰api-interfaces.ts属性import { ApiProperty } from '@nestjs/swagger';
export class Message {
@ApiProperty()
message: string;
}WARNING in ./node_modules/@nestjs/common/utils/load-package.util.js 8:39-59
Critical dependency: the request of a dependency is an expression
WARNING in ./node_modules/express/lib/view.js 81:13-25
Critical dependency: the request of a dependency is an expression
WARNING in ./node_modules/@nestjs/mapped-types/dist/type-helpers.utils.js
Module not found: Error: Can't resolve 'class-transformer' in '.\node_modules\@nestjs\mapped-types\dist'
ERROR in ./node_modules/@nestjs/common/cache/cache.providers.js
Module not found: Error: Can't resolve 'cache-manager' in '.\node_modules\@nestjs\common\cache'
ERROR in ./node_modules/@nestjs/common/pipes/validation.pipe.js
Module not found: Error: Can't resolve 'class-transformer' in '.\node_modules\@nestjs\common\pipes'
...这看起来像一个捆绑问题,类似于这一个。我还没有找到任何优雅的工作解决方案来修复它的角度构建。
方法2.使用NestJS Swagger插件并避免使用装饰器
这甚至会是一个更好的方法,但它没有工作,尽管。首先,Swagger插件需要NestJS CLI,在中不是这样。有一个问题提出了一些解决办法,但我还没有发现它们是否足够可靠和完整。第二,插件没有涵盖一些重要的用例,无论如何,这些用例仍然需要装饰人员。例如:
@ApiProperty({
oneOf: [{ $ref: getSchemaPath(TypeA) }, { $ref: getSchemaPath(TypeB) }],
})
type: TypeA | TypeB;正如上面所描述的,装饰师会导致错误。
方法3.在DTO类之外创建接口,以便在角应用程序中专用
在这种方法中,吸引我的是从后端特定逻辑( Swagger、序列化或验证修饰器)中抽象出来的能力。我们可以做以下工作:
// Expose to the back-end
export class MessageDto {
@ApiProperty()
message: string;
}
// Expose to the front-end
export interface Message extends MessageDto {}在这种情况下,Message接口可以很好地用interface编译。但是,一旦我们引入更复杂的DTO组合(带有嵌套DTO的类),这种方法就无法工作。
如果有其他想法,我将不胜感激。
发布于 2020-08-10 03:11:35
我已经成功地在角和Nest.js之间共享了DTO(逼近#1)。
将@angular-devkit/build-angular:browser替换为@angular-builders/custom-webpack:browser解决了构建或服务角度应用程序时的错误。
有关更多详细信息,请参阅https://github.com/nestjs/nest/issues/1706#issuecomment-474657479。
发布于 2020-10-27 17:02:10
作为简单的解决方法,您可以使用ApiModelProperty装饰器而不是ApiProperty:
import { ApiModelProperty } from '@nestjs/swagger/dist/decorators/api-model-property.decorator';ApiModelProperty不会导致缓存管理器注入问题,装饰器将允许您设置DTO的API文档。
https://stackoverflow.com/questions/61720662
复制相似问题