我在这个项目中使用TypeScript和NestJS:
https://github.com/EricKit/nest-user-auth
我正在尝试将_id属性添加到GraphQL架构:
类型用户{ 用户名:字符串! 电子邮件:……
的 GraphQL方式是自定义标量类型,用于序列化/反序列化ObjectId 强>
GraphQL架构
scalar Date scalar MongoObjectId ... type User { username: String! email: String! permissions: [String!]! createdAt: Date! updatedAt: Date! enabled: Boolean! _id: MongoObjectId! }
MongoObjectId标量类,灵感来源于 NestJs日期标量 和 TypeGraphQL ObjectId标量
import { Scalar } from '@nestjs/graphql'; import { Kind, ASTNode } from 'graphql'; import { ObjectId } from "mongodb"; @Scalar('MongoObjectId') export class ObjectIdScalar { description = 'Mongo object id scalar type'; parseValue(value: string) { return new ObjectId(value); // value from the client } serialize(value: ObjectId) { return value.toHexString(); // value sent to the client } parseLiteral(ast: ASTNode) { if (ast.kind === Kind.STRING) { return new ObjectId(ast.value); // value from the client query } return null; } }
之后,我们需要注册 ObjectIdScalar 作为提供者(就像 日期标量 )并改变 _id 从 string 至 Type.ObjectID 。
ObjectIdScalar
_id
string
Type.ObjectID