Как вызвать api с помощью Aws sdk angular 2?

Я создал запрос с помощью AWS и хочу вызвать свой API API AWS SDk. Ниже весь мой код.

var endpoint = new AWS.Endpoint(AWS.config.domain);
var request = new AWS.HttpRequest(endpoint, AWS.config.region);
 AWS.config.credentials = new AWS.Credentials('somevalue', 'somevalue', '');
var signer = new AWS.Signers.V4(request, 'es',true);
signer.addAuthorization(AWS.config.credentials, new Date());
request.body = JSON.stringify({
            'query': {
                my value
        });

Теперь у меня есть готовый объектный запрос, и мне нужно вызвать свой API. Но я не знаю, какой метод AWS или http мне нужно использовать invoke. Я пробовал указанные ниже параметры, но безуспешно. Я также использовал метод request.on, но он говорит не поддерживается.

`var promise = request.promise();
    promise.then(
        function(body) {
          console.info("yes")
        },
        function(error) {
            console.info("no")
        }
    );

Я также использовал приведенный ниже код для вызова, но он не работает и дает ошибки.

    var client = new AWS.HttpClient();
        client.handleRequest(request,null,function(response) {
            console.info(response.statusCode + ' ' + response.statusMessage);
            var responseBody = '';
            response.on('data', function (chunk) {
              responseBody += chunk;
            });
            response.on('end', function (chunk) {
              console.info('Response body: ' + responseBody);
            });
          }, function(error) {
            console.info('Error: ' + error);
          });

core.js:1448 ERROR TypeError: Cannot read property 'xhrAsync' of null
    at features.constructor.handleRequest (xhr.js:63)
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 909
1

Ответы 1

Предоставленный вами фрагмент кода является лишь примером синтаксиса на основе обещаний. Чтобы узнать больше об aws-sdk, я рекомендую прочитать их документацию.

Другой ответ об использовании aws-sdk можно найти здесь:

Как использовать определения AWS sdk для TypeScript?

А AWS предлагает документацию по своему пакету здесь:

https://aws.amazon.com/documentation/sdk-for-javascript/

Вот отличный пример использования:

https://gist.github.com/ckimrie/96e4992036c559c1f046476d3fc16a7e

... показывая соответствующий фрагмент:

//---- Angular 2 Http Service Example ----
import {Injectable} from "@angular/core";
import {Http, Headers} from "@angular/http";
const AWS = require("aws-sdk");

@Injectable()
export class ApiGatewayService {

 constructor(private http:Http){

let creds = new AWS.CognitoIdentityCredentials({
  IdentityPoolId: "eu-west-1:xxx-xxxx-xxxxxxxx"
});

AWS.config.update({
  region: 'eu-west-1',
  credentials: creds
});

AWS.config.credentials.get((err) => {
  if (err) throw err;

  let httpRequest = new AWS.HttpRequest("https://xxxxx.execute-api.eu-west-1.amazonaws.com/v1/my/api", "eu-west-1");
  httpRequest.method = "POST";
  httpRequest.headers.host = "xxxxx.execute-api.eu-west-1.amazonaws.com";
  httpRequest.headers['Content-Type'] = "application/json";
  httpRequest.body = JSON.stringify({
    data: {
      username: 'foo',
      password: 'bar',
      applicationName: 'biz',
    }
  });

  let v4signer = new AWS.Signers.V4(httpRequest, "execute-api", true);
  v4signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());

  //Create a headers object from the AWS signed request
  let headers = new Headers();
  for(let key of Object.keys(httpRequest.headers)){
    headers.set(key, httpRequest.headers[key]);
  }
  headers.delete('host'); //Browser throws a warning if attempting to set host header
  this.http.post(httpRequest.endpoint.href, httpRequest.body, {
    method: httpRequest.method,
    search: httpRequest.endpoint.search,
    headers: headers
  }).subscribe((data)=>{
    console.info(data); //Success
  });
})
 }
}

@ kyle.Спасибо за ответ, я отредактировал свой вопрос, не могли бы вы предоставить более подробную информацию. Я просмотрел предоставленные вами ссылки, но их было немного.

Naveen Suryawanshi 10.07.2018 19:20

расширил свой ответ, чтобы предоставить ссылку на суть с использованием этой части aws sdk

Kyle Burkett 10.07.2018 19:36

Спасибо за отличный ответ. Я частично сработал. Получение сообщения об ошибке Поле заголовка запроса X-Amz-User-Agent не разрешено Access-Control-Allow-Headers в предполетном ответе. Не могли бы вы предоставить некоторые подробности, как решить эту проблему

Naveen Suryawanshi 10.07.2018 20:41

Это другая проблема, чем ваша исходная публикация, но вы можете найти ответ здесь: stackoverflow.com/questions/49249018/… Я рекомендую проголосовать за и принять в качестве ответа, если мое сообщение решает ваш первоначальный вопрос.

Kyle Burkett 11.07.2018 21:21

Другие вопросы по теме