Я создал запрос с помощью 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)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Предоставленный вами фрагмент кода является лишь примером синтаксиса на основе обещаний. Чтобы узнать больше об 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
});
})
}
}
расширил свой ответ, чтобы предоставить ссылку на суть с использованием этой части aws sdk
Спасибо за отличный ответ. Я частично сработал. Получение сообщения об ошибке Поле заголовка запроса X-Amz-User-Agent не разрешено Access-Control-Allow-Headers в предполетном ответе. Не могли бы вы предоставить некоторые подробности, как решить эту проблему
Это другая проблема, чем ваша исходная публикация, но вы можете найти ответ здесь: stackoverflow.com/questions/49249018/… Я рекомендую проголосовать за и принять в качестве ответа, если мое сообщение решает ваш первоначальный вопрос.
@ kyle.Спасибо за ответ, я отредактировал свой вопрос, не могли бы вы предоставить более подробную информацию. Я просмотрел предоставленные вами ссылки, но их было немного.