Не удается запросить всех пользователей из-за идентификатора MongoDB

avatar
Sub-Zero
9 августа 2021 в 01:32
142
1
0

Я пишу CRUD API, встроенный в TypeScript и TypeGoose.
Я получаю сообщение об ошибке

CannotDetermineGraphQLTypeError: Невозможно определить тип вывода GraphQL для «_id» класса «Пользователь». Является ли значение, которое используется в качестве его типа TS или явного типа, украшено надлежащим декоратором или это правильное выходное значение?

У меня есть сущность пользователя.

import { Field, ObjectType } from 'type-graphql';
import { ObjectId } from 'mongodb';
import { prop as Property, getModelForClass } from '@typegoose/typegoose';

@ObjectType()
export class User {
  @Field()
  readonly _id: ObjectId;

  @Field()
  @Property({ required: true })
  email: string;

  @Field({ nullable: true })
  @Property()
  nickname?: string;

  @Property({ required: true })
  password: string;

  constructor(email: string, password: string) {
    this.email = email;
    this.password = password;
  }
}

export const UserModel = getModelForClass(User);

А вот так выглядит мой преобразователь запросов.

@Query(() => [User])
  async users() {
    const users = await UserModel.find();
    console.log(users);
    return users;
  }

Как я могу это решить? Похоже, что TypeGraphQL не понимает, что такое идентификатор MongoDB?

Источник

Ответы (1)

avatar
Arsiki
9 августа 2021 в 01:36
1

Я не уверен в этом, но, возможно, вам поможет ObjectId.toString(). Документ MongoDB об ObjectId.toString()

Sub-Zero
9 августа 2021 в 15:20
0

Да, вы правы, мне пришлось сначала преобразовать его в строку, а затем вернуть, потому что GraphQL не распознает ObjectId.

Michał Lytek
22 августа 2021 в 09:34
0

Вы также можете создать скаляр идентификатора объекта: typegraphql.com/docs/scalars.html#custom-scalars