Файлы, загруженные в graphql, разрешаются автоматически, если они не находятся внутри объекта. Это ошибка или ожидаемое поведение? - PullRequest
1 голос
/ 28 октября 2019

Когда я загружал файлы в graphql, я заметил, что иногда я получаю их как Promise, а иногда я получаю разрешенный файл мгновенно. После некоторого тестирования я обнаружил, что если я загружаю файл как прямой Arg, он автоматически разрешается, однако, если он вложен в объект, вы получаете Обещание (но файл внутри уже есть), которое вы должны ждать дос помощью. Чтобы прояснить ситуацию, я добавлю небольшой пример кода, чтобы проиллюстрировать:

@InputType()
export class TestFileType {
  @Field(type => GraphQLUpload)
  file: IUpload;
}

interface IUpload {
  filename: string;
  mimetype: string;
  encoding: string;
  createReadStream: () => Stream;
}

  @Mutation(of => Boolean)
  async fileUploadTest(
    @Arg('file', () => GraphQLUpload) file: IUpload,
    @Arg('fileObj', type => TestFileType) fileObj: TestFileType,
  ): Promise<boolean> {
    console.log('Test File: ', file);
    /* GIVES
    Test File:  {
      filename: 'test.png',
      mimetype: 'image/png',
      encoding: '7bit',
      createReadStream: [Function: createReadStream]
    }
    */

    console.log('Test OBJ file: ', fileObj.file);
    /* GIVES
    Test OBJ file:  Promise {
      {
        filename: 'test.png',
        mimetype: 'image/png',
        encoding: '7bit',
        createReadStream: [Function: createReadStream]
      }
    }
    */
    return true;
  }

Я ожидаю получить либо разрешенный файл, либо Promise в обоих случаях. Должен ли я сообщить об этом трекеру или я что-то упустил?

1 Ответ

0 голосов
/ 31 октября 2019

Скаляр GraphQL Upload, который можно использовать в GraphQLSchema. Это значение в преобразователях - это обещание, которое разрешает сведения о загрузке файла для обработки и хранения.

Таким образом, вы должны сообщить, что вы получаете значение, не являющееся обещанием, которое не может быть "затем".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...