无服务器:此服务中不存在该功能

serverless: function doesn't exist in this service

在无服务器中,我的函数具有以下目录结构:

serverless.yml
functions -
    stories -
        create.js
        get.js

我的 serverless.yml 然后看起来像这样:

functions:
  stories:
    create:
      handler: functions/stories/create.main
      events:
        - http:
          path: stories/create
          method: post
          cors: true
          authorizer: aws_iam
    get:
      handler: functions/stories/get.main
      events:
        - http:
          path: stories/{id}
          method: get
          cors: true
          authorizer: aws_iam

然而,当我 运行 检查创建的测试时:serverless invoke local --function create --path mocks/create-event.json 我得到以下错误:

Serverless Error ---------------------------------------

  Function "create" doesn't exist in this Service

我设法使一个功能正常工作,如下所示:

functions:
  stories:
    handler: functions/stories/create.main
    events:
      - http:
        path: stories/create
        method: post
        cors: true
        authorizer: aws_iam

自从我添加了 get 函数后,我决定我需要在故事之后添加 create 和 get 部分,但是无论我如何更改处理程序,这些函数似乎都不存在。

我已经尝试将路径更改为 functions/stories/create/create.main 没有任何区别,是否有明显的遗漏以允许同一位置的多个处理程序?

我在看下面的example,它使用了"todos"的一个文件夹,其中包含多个函数,但我看不出它和我的有什么明显的区别,除了我已经添加了一个额外的文件夹。

您的模板无效。您不能只是将您的函数放在任意节点下以告诉框架它适用于您应用程序的某些对象。您的 stories: 节点应该是评论。

尝试这样的事情:

functions:
    # Stories related functions
    createStory:
      handler: functions/stories/create.main
      events:
        - http:
            path: stories   # You can post directly to stories to be more RESTful
            method: post
            cors: true
            authorizer: aws_iam
    getStory:
      handler: functions/stories/get.main
      events:
        - http:
            path: stories/{id}
            method: get
            cors: true
            authorizer: aws_iam

     # More examples to understand the routing
    getAllStories:
      handler: functions/stories/getAll.main # Returns a list of all stories
      events:
        - http:
            path: stories
            method: get
            cors: true
            authorizer: aws_iam
    deleteStory:
      handler: functions/stories/delete.main # Deletes a story
      events:
        - http:
            path: stories/{id}
            method: delete
            cors: true
            authorizer: aws_iam

花了这么多时间!刚发现当我输入命令时,我在 handle.js 文件中提到了函数名称 例如 这是错误的:

sls invoke local --function testFunction

这是对的:

sls invoke local --function test