对于我的下一个项目,我想在前端使用 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)
由于这在这个特定示例中有效,因此在您可能遇到的其他用例中可能无法很好地工作。
根据我使用 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)
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |