繁体   English   中英

如何在 lambda function 中传递和检索多个参数?

[英]How to pass and retrieve multiple parameters in lambda function?

我目前正在使用带有 python 和 dynamoDB 的无服务器框架开发 REST API。 我想知道如何在 lambda function 中传递和检索参数。 我在serverless.xml上的配置如下所示:

getNearestConvenios:
  handler: src/controllers/convenio_controller.get_nearest_convenios
  events:
    - http:
        path: convenios/nearest
        method: get
        cors: True
        request:
          template:
            application/json: '{ "lat" : "$input.params(''lat'')",  "long" : "$input.params(''long'')"}'

我正在尝试检索这样的参数:

def get_nearest_convenios(event, context):
  try:
    parameters = event['pathParameters']
    convenios = service.get_nearest_convenios(parameters['lat'], parameters['long'])
    return http.ok(convenios)
  except Exception as ex:
    logger.warn("WARNING: Request id: {0}, Error: {1}, Info: {2}".format(context.aws_request_id, type(ex), ex.args))
    return http.bad_request(str(ex))

我遵循了官方文档中提供的自定义请求模板,但直到现在我都没有成功。 此外,在 CloudWatch 中显示以下错误:

    [WARNING]   2020-08-14T09:04:11.783Z    3c9222b2-4601-4460-ba7c-3cd89ba3b04b    WARNING: Request id: 3c9222b2-4601-4460-ba7c-3cd89ba3b04b, Error: <class 'TypeError'>, Info: ("'NoneType' object is not subscriptable",)

您没有在 lambda 中指定任何集成类型,因此它将使用默认的lambda-proxy集成类型。 In Lambda proxy integration, when a client submits an API request, API Gateway passes to the integrated Lambda function the raw request as-is. 您不能将映射模板与lambda-proxy集成一起使用。 如果您想转换您的请求或响应,您可以选择不带代理的 lambda 集成。

您正在使用 HTTP GET。 因此,您可以将数据作为查询字符串或路径参数传递。

  • 查询字符串:您传递 url 中的数据,例如http://api.example.com/Books?id=1 查询字符串参数可以在 lambda 中作为event. queryStringParameters event. queryStringParameters

  • 路径参数:您可以在无服务器模板中定义一个参数,如下所示。 然后您可以访问 lambda 中的路径参数,如event.pathParameters

     getNearestConvenios: handler: src/controllers/convenio_controller.get_nearest_convenios/{parameter} events: - http: path: convenios/nearest method: get cors: True

参考: Lambda 代理集成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM