提问者:小点点

如何在Nestjs上创建自定义graph ql标量?Graphql标量


我正在使用GraphQL在Apollo服务器上使用Nestjs实现一个框架,我想使用一些自定义的GraphQL标量。我找到了这个网站,https://www.graphql-scalars.dev/docs/quick-start,它有助于导入自定义标量,而无需实际实现它们https://docs.nestjs.com/graphql/scalars#create-a-custom-scalar.具体来说,我想使用BigIntTimeURL

从快速开始页面上的文档中,我不确定代码属于哪里。我应该在app. module.ts中编写代码吗?


// or import specific typeDefs only with ES6 Import
import { ScalarNameTypeDefinition } from 'graphql-scalars';
// or import specific typeDefs only with CommonJS
const { ScalarNameTypeDefinition } = require('graphql-scalars');
// or import all typeDefs once with ES6 Import
import { typeDefs as scalarTypeDefs } from 'graphql-scalars';
// or import all typeDefs once with CommonJS
const { typeDefs: scalarTypeDefs } = require('graphql-scalars');

const typeDefs = [
  ...scalarTypeDefs,
  // other typeDefs
];
// or
const typeDefs = [
  ScalarNameTypeDefinition,
  // other typeDefs
];

我当前的GraphQLModule:

GraphQLModule.forRoot<ApolloDriverConfig>({
  driver: ApolloDriver,
  typePaths: ['./**/**/**/*.graphql'],
  definitions: {
    path: join(process.cwd(), 'src/graphql.ts'),
    outputAs: 'class',
  },  
}),

解析器地图怎么样?代码应该属于哪里?assets. resverver.ts?我也不明白这段代码属于哪里?

简而言之,如何在Apollo服务器上的Nestjs框架中使用graph ql-calars包?有没有开源的GitHub存储库可以查看?


共1个答案

匿名用户

看这里NestJs导入自定义标量

这是我的app. module.ts的样子:

import { BigIntResolver, DateResolver, DateTimeResolver } from 'graphql-scalars';

GraphQLModule.forRoot<ApolloDriverConfig>({
  driver: ApolloDriver,
  typePaths: ['./**/*.graphql'],
  definitions: {
    path: join(process.cwd(), 'src/graphql/graphql-types.ts'),
    customScalarTypeMapping: {
      BigInt: 'bigint',
      DateTime: 'Date',
    },
  },
  resolvers: {
    BigInt: BigIntResolver,
    Date: DateResolver,
    DateTime: DateTimeResolver,
  },
  playground: true,
  debug: true,
}),

然后在我的. graph ql文件中,我可以使用这些类型:

scalar BigInt
scalar Date
scalar DateTime

input WorkperiodContent {
  editedAt: DateTime
  startDate: Date
  endDate: Date
}

完成此操作后,我可以使用这些新标量在GraphQL Playground上成功运行查询。

您甚至不需要创建自己的自定义标量。您只需导入您需要的三个,您就可以开始了。