Какой тип я возвращаю с лямбда-ответами AWS в машинописном наборе для ответа на метод AWS APIGateway? - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу построить правильный проект машинописи на AWS lambda.

Сейчас у меня есть следующие определения:

export type HttpResponse = {
  statusCode: number;
  headers: {};
  body: string;
}

export async function readCollection (event, context, callback): Promise<HttpResponse>{

  console.log(event); // Contains incoming request data (e.g., query params, headers and more)

  const data =  [
    {
      id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
      name: "some thing",
      uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
    }
  ]

  const response = {
    statusCode: 200,
    headers: {
    },
    body: JSON.stringify({
      status: "ok",
      data: data
     })
  };

  return response;
};

Но

Вместо моего пользовательского типа HttpResponse я хочу использовать официальное определение.

Но какой официальный тип я импортирую и возвращаю?

Ответы [ 3 ]

0 голосов
/ 01 января 2019

После нескольких дней исследований я нашел ответ так близко;)

вы возвращаетесь Promise<APIGateway.MethodResponse>

import { APIGateway } from "aws-sdk";

export async function readCollection (event, context, callback): Promise<APIGateway.MethodResponse> {

  console.log(event); // Contains incoming request data (e.g., query params, headers and more)

  const data =  [
    {
      id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
      name: "some thing",
      uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
    }
  ]

  const response = {
    statusCode: "200",
    headers: {
    },
    body: JSON.stringify({
      status: "ok",
      data: data
     })
  };

  return response;
};
0 голосов
/ 19 января 2019

Пакет @ types / aws-lambda предоставляет типы для использования TypeScript внутри функции AWS Lambda.Для функций AWS Lambda, вызываемых с помощью Тип интеграции Lambda Proxy API Gateway , выполните следующие действия:

Установите пакет

$ yarn add --dev @types/aws-lambda

Или, если вы предпочитаете npm:

$ npm i --save-dev @types/aws-lambda

Тогда в вашем файле обработчика:

import { APIGatewayProxyEvent, Context, APIGatewayProxyResult } from "aws-lambda"

export async function hello (event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello world',
      input: event,
    })
  }
}
0 голосов
/ 30 декабря 2018

В противном случае вам нужно вернуть обратный вызов, если ваша лямбда была вызвана положением s3, он будет думать, что он не выполнялся, и будет продолжать выполнять вашу функцию время от времени, генерируя дублированные вызовы.Вам также необходимо вернуть обратный вызов из запроса API-шлюза, чтобы вы могли отправить правильный ответ пользователю.

Для успешных вызовов:

callback(null, response);

Для вызовов с ошибками:

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