без сервера: функция не существует в этом сервисе - PullRequest
0 голосов
/ 25 июня 2018

В режиме без сервера у меня есть следующая структура каталогов для моих функций:

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

my 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 без разницы, есть ли что-то очевидное, чего мне не хватает, чтобы разрешить несколько обработчиков в одном месте?

Я смотрел на следующий пример , в котором используется одна папка «todos», содержащая несколько функций, но я не вижу никакой очевидной разницы между ней и моей, кроме того, что я добавил дополнительная папка.

1 Ответ

0 голосов
/ 29 июня 2018

Ваш шаблон недействителен. Вы не можете просто поместить свою функцию в произвольный узел, чтобы сообщить платформе, что она применяется к некоторому объекту вашего приложения. Ваш 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
...