【问题标题】:GraphQL endpoint return null object in Nest.jsGraphQL 端点在 Nest.js 中返回空对象
【发布时间】:2020-05-09 00:20:39
【问题描述】:

我正在使用 Nest.js 和 Sequelize-Typescript 构建 GraphQL API。

当我调用删除和更新突变时,我得到了一个空对象,但操作完成了。我需要输入 {nullable: true} 因为我收到错误消息 Cannot return null for non-nullable field 。我该如何解决?我需要端点返回更新的对象以在前面显示信息

error img

book.dto.ts

import { ObjectType, Field, Int, ID } from 'type-graphql';

@ObjectType()
export class BookType {
    @Field(() => ID, {nullable: true})
    readonly id: number;
    @Field({nullable: true})
    readonly title: string;
    @Field({nullable: true})
    readonly author: string;
}

book.resolver.ts

import {Args, Mutation, Query, Resolver} from '@nestjs/graphql';
import { Book } from './model/book.entity';
import { BookType } from './dto/book.dto';
import { CreateBookInput } from './input/createBook.input';
import { UpdateBookInput } from './input/updateBook.input';
import { BookService } from './book.service';

@Resolver('Book')
export class BookResolver {
    constructor(private readonly bookService: BookService) {}

    @Query(() => [BookType])
    async getAll(): Promise<BookType[]> {
        return await this.bookService.findAll();
    }

    @Query(() => BookType)
    async getOne(@Args('id') id: number) {
        return await this.bookService.find(id);
    }

    @Mutation(() => BookType)
    async createItem(@Args('input') input: CreateBookInput): Promise<Book> {
        const book = new Book();
        book.author = input.author;
        book.title = input.title;
        return await this.bookService.create(book);
    }

    @Mutation(() => BookType)
    async updateItem(
        @Args('input') input: UpdateBookInput): Promise<[number, Book[]]> {
        return await this.bookService.update(input);
    }

    @Mutation(() => BookType)
    async deleteItem(@Args('id') id: number) {
        return await this.bookService.delete(id);
    }

    @Query(() => String)
    async hello() {
        return 'hello';
    }
}

book.service.ts

import {Inject, Injectable} from '@nestjs/common';
import {InjectRepository} from '@nestjs/typeorm';
import {Book} from './model/book.entity';
import {DeleteResult, InsertResult, Repository, UpdateResult} from 'typeorm';

@Injectable()
export class BookService {
    constructor(@Inject('BOOKS_REPOSITORY') private readonly bookRepository: typeof Book) {}

    findAll(): Promise<Book[]> {
        return this.bookRepository.findAll<Book>();
    }

    find(id): Promise<Book> {
       return this.bookRepository.findOne({where: {id}});
    }

    create(data): Promise<Book> {
        return data.save();
    }

    update(data): Promise<[number, Book[]]> {
        return this.bookRepository.update<Book>(data, { where: {id: data.id} });
    }

    delete(id): Promise<number> {
        return this.bookRepository.destroy({where: {id}});
    }
}

【问题讨论】:

    标签: graphql nestjs sequelize-typescript


    【解决方案1】:

    您可以在解析器查询中设置选项参数来修复它

    @Query(() => BookType, { nullable: true })
    

    【讨论】:

      【解决方案2】:

      为什么要从删除中返回这些字段?您必须已经将它们放在前端...您可以根据它是否有效将该突变的返回类型更改为真或假...在更新中您可以进行突变并添加返回:真如果您使用的是 postgres,请在您的选项中...

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 2019-03-17
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2019-06-13
        • 2021-12-18
        • 2017-10-07
        相关资源
        最近更新 更多