在nestJs中可以一起使用控制器和graphql解析器吗?

RHa*_*uck 9 nestjs

对于我的下一个项目,我想在前端使用 Graphql。此外,这个项目还应该提供一个 Rest-Api。现在我发现了这个非常伟大的框架“nestjs”,理论上可以将 Graphql 端点和 Rest 端点结合起来。不幸的是,如果这会导致问题,我在文档中找不到任何内容。下面的代码可以正常使用吗?

阿蒂克尔控制器:

@Controller('article')
@Resolver('Article')
export class ArticleController {
    constructor(private articleService: ArticleService){}

    @Get()
    @Query(returns => CArticle)
    async Article() {
     const dbElement=await this.articleService.getById("xy");
     return dbElement;
    }
}
Run Code Online (Sandbox Code Playgroud)

文章模块:

@Module({
    controllers:[ArticleController],
    providers:[ArticleService,ArticleController]
})
export class ArticleModule {}
Run Code Online (Sandbox Code Playgroud)

Zim*_*Gil 3

由于这在这个特定示例中有效,因此在您可能遇到的其他用例中可能无法很好地工作。

根据我使用 Rest 和 gRPC 的经验 - 控制器最终需要处理不同的事情。

强烈建议为每个 API 配备专用的控制器/解析器- 这些控制器/解析器负责 API 条目(即身份验证、处理上下文)并将业务逻辑放在单独的提供程序中。

所以你的例子看起来像这样:

文章.controller.ts:

@Controller('article')
export class ArticleController {
    constructor(private articleService: ArticleService){}

    @Get()
    async Article() {
     return this.articleService.getById("xy");
    }
}
Run Code Online (Sandbox Code Playgroud)

文章.resolver.ts:

@Resolver('Article')
export class ArticleResolver {
    constructor(private articleService: ArticleService){}

    @Query(returns => CArticle)
    async Article() {
     return this.articleService.getById("xy");
    }
}
Run Code Online (Sandbox Code Playgroud)

文章.module.ts:

@Module({
    controllers:[ArticleController, ArticleResolver],
    providers:[ArticleService]
})
export class ArticleModule {}
Run Code Online (Sandbox Code Playgroud)