StitchServiceError "aws:" aws_service "является обязательной строкой", errorCodeName: InvalidParameter - PullRequest
2 голосов
/ 29 апреля 2020

Я настраиваю AWS S3 bucket для загрузки аудиофайлов с использованием MongoDB Stitch (вот документы mon go s3 документы . После следования инструкциям и аутентификации моего пользователя я продолжаю получать эта ошибка при попытке загрузить выбранный файл: изображение ошибки из консоли

В строке 119, откуда исходит ошибка, я просто улавливаю ошибку после запуска AWS build:

const aws = stitchClient.getServiceClient(AwsServiceClient.factory, "AWS");

convertAudioToBSONBinaryObject(file).then((result) => {
  const audiofile = mongodb.db("data").collection("audiofile");
  //now we need an instance of AWS service client
  const key = `${stitchClient.auth.user.id}-${file.name}`;
  // const key = `${stitchClient.auth.user.id}-${file.name}`;
  const bucket = "myBucketName";
  const url =
    "http://" + bucket + ".s3.amazonaws.com/" + encodeURIComponent(key);

  const args = {
    ACL: "public-read",
    Bucket: bucket,
    ContentType: file.type,
    Key: key,
    Body: result,
    // aws_service: "s3",
  };
  // building the request
  const request = new AwsRequest.Builder()
    .withService("s3")
    .withAction("PutObject")
    .withRegion("us-east-1")
    .withArgs(args);

  aws
    .execute(request.build)
    .then((result) => {
      console.log(result);
      console.log(url);
      return audiofile.insertOne({
        owner_id: stitchClient.auth.user.id,
        url,
        file: {
          name: file.name,
          type: file.type,
        },
        Etag: result.Etag,
        ts: new Date(),
      });
    })
    .then((result) => {
      console.log("last result", result);
    })
    .catch((err) => {
      console.log(err);
    });
});

Мое правило стежков для s3 выглядит следующим образом: Правило стежков для AWS s3

Так что мне кажется, что все настроено так, как оно предназначено к, но ошибка говорит мне, что я не передаю все необходимые аргументы. Буду очень признателен за любые мысли о том, как исправить эту ошибку.

PS Если я изменю "AWS" на "AWS_S3" в этой строке: const aws = stitchClient.getServiceClient(AwsServiceClient.factory, "AWS"); Сообщение об ошибке меняется на следующее:

StitchServiceError {message: "служба не найдена: 'AWS_S3'", name: "StitchServiceError", errorCode: 18, errorCodeName: "ServiceNotFound",

А лог в стежке показывает это для информации для обеих ошибок: Журналы стежков

1 Ответ

0 голосов
/ 29 апреля 2020

Ответ на это - простая опечатка в этой строке:

aws .execute(request.build) .then((result)

build - это функция, поэтому мне просто нужно было ее вызвать - (request.build ()). затем ((результат). Проблема решена, спасибо всем!

...