【问题标题】:How to define multiple paths for one handler in serverless?如何在无服务器中为一个处理程序定义多个路径?
【发布时间】:2020-12-05 07:57:59
【问题描述】:

我一直在尝试和在线搜索,但无法找到回复。是否可以使用无服务器框架实现以下目标:

我想使用具有以下定义的代码的get.handler 来获取一个项目和获取所有项目。所以:

  • 如果我点击api.example.com/items/,我会检索所有项目
  • 如果我点击api.example.com/items/1234,我会用id = 1234检索项目
 - get_items:
    handler: project/items/get.handler
    events:
      - http:
          path: items/{itemId}
          method: get

到目前为止get.handler 中,我检查event.pathParameters? event.pathParameters.itemId : null 是否存在特定项目并调用一些getItem(itemdId) 函数,如果它不退出我调用getAll() 函数。

如果我在路径中传递项目 ID,它可以工作,但是当我请求 api.example.com/items/ 时,我收到以下错误: not a valid key=value pair (missing equal-sign) in Authorization header。这意味着我的路径有问题,我必须将项目 ID 传递给路径参数。

我的问题是:有没有办法可以在- http: 区域中使用多个路径,或者有什么推荐的方法来解决这个问题(只需创建两个单独的处理程序)?

【问题讨论】:

    标签: amazon-web-services serverless-framework serverless


    【解决方案1】:

    有两种方法可以轻松完成您要查找的内容。 首先,一个 lambda 函数可以由多个事件触发。您可以将另一个 http 事件添加到处理程序数组中,如下所示:

    get_items:
        handler: project/items/get.handler
        events:
          - http:
              path: items/{itemId}
              method: get
          - http:
              path: items/
              method: get
    

    或者,您可以使用 {proxy+} 参数。你可以阅读更多关于各种代理方法here

    【讨论】:

    • 我希望这里有一个错字。 “首先,lambda 函数可以有多个处理程序。”然后您将展示如何将另一个事件添加到单个处理程序。
    • 是的,你是对的。它应该是“Lambda 函数可以订阅多个事件。”。我已经修改了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多