Ошибка бессерверного развертывания AWS NodeJS

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

Unable to import module 'services/tv/get/handler': Error
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)

Я нашел несколько тем на GitHub, в которых говорилось об аналогичной проблеме в этой теме, однако, пройдя через нее, я не смог заставить какие-либо исправления работать в моей ситуации. Я проверил развернутый zip-файл и, похоже, у него есть необходимые зависимости.

Serverless.yml

service: show-stoppers-lambda

provider:
  name: aws
  runtime: nodejs8.10
  memorySize: 128
  timeout: 10
  stage: production
  region: ap-southeast-1

functions:

  getNowAiringTv:
    handler: services/tv/get/handler.getNowAiringTv
    events:
      - http:
          path: tv/now
          method: get
          cors: true

  getTvShowDetails:
    handler: services/tv/get/handler.getShowDetails
    events:
      - http:
          path: tv/{showId}
          method: get
          cors: true

  getTvShowSearch:
    handler: services/tv/get/handler.getShowSearch
    events:
      - http:
          path: tv/search/{query}
          method: get
          cors: true

  getDiscoverTvFilter:
    handler: services/tv/get/handler.getDiscoverTv
    events:
      - http:
          path: tv/filter
          method: get
          cors: true

  getSimilarTvShows:
    handler: services/tv/get/handler.getSimilarShows
    events:
      - http:
          path: tv/similar/{showId}
          method: get
          cors: true

  getTvSeasonDetail:
    handler: services/tv/get/handler.getTvSeasons
    events:
      - http:
          path: tv/{showId}/{season}
          method: get
          cors: true

  getTvSeasonEpisodeDetail:
    handler: services/tv/get/handler.getTvEpisodes
    events:
      - http:
          path: tv/{showId}/{season}/{episode}
          method: get
          cors: true


plugins:
  - serverless-offline

Package.json

{
  "name": "show-stoppers-lambda",
  "version": "1.0.0",
  "description": "",
  "main": "handler.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "alex",
  "license": "ISC",
  "devDependencies": {
    "serverless-offline": "^3.25.6"
  },
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "dotenv": "^6.0.0",
    "jsonwebtoken": "^8.3.0",
    "moment": "^2.22.2",
    "mongoose": "^5.1.5",
    "request": "^2.87.0"
  }
}

Полный код находится на моем github здесь, и я включил package.zip здесь, который содержит содержимое (предварительно очищенный .env). Я надеюсь, что кто-то сможет показать мне, где я ошибаюсь, я видел некоторые предложения до использования serverless-webpack, но для чего-то небольшого, подобного этому, я не уверен, что это требуется, также я не уверен, как его установить вверх либо работать здесь.

Обновлять

Я обнаружил, что причина, по которой я получаю много 500 ошибок, связана с запросом, я до сих пор не понимаю, почему, поскольку зависимость, похоже, включена в zip, но, возможно, она отсутствует, кроме того, что требуется. Я рассмотрю это чуть позже, но в настоящее время я работал над этим, используя простую реализацию модуля HTTPS, и теперь все запросы запускаются правильно.

Можете ли вы отредактировать вопрос, чтобы было понятнее? Я думал, у вас проблемы с загрузкой функции обработчика - Unable to import module 'services/tv/get/handler': Error. Может быть полезно другим.

asr9 27.07.2018 16:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
289
1

Ответы 1

Вы включаете правильный файл? Ваш код handler.js, похоже, имеет только одну функцию hello, на которую нужно ссылаться как на handler.hello. Если это был просто фиктивный файл, чтобы задать вопрос здесь, попробуйте указать функцию в yaml как handler.<function-name>.

да, в основном есть фиктивный файл, который я забыл удалить, но yml указывает на services / tv / get / handler, так что он должен работать наверняка?

Alex J Wilkinson 26.07.2018 05:04

Я также попытался реструктурировать и просто изменить базовый обработчик на тот, который находится в service / tv / get, и у него все еще та же проблема, но он продолжает работать локально.

Alex J Wilkinson 26.07.2018 05:11

Я имел в виду, обновите вашу спецификацию yaml, чтобы обработчик назывался handler: handler.getNowAiringTv. Конечно, когда я добавил services/tv/get/ в рабочую бессерверную спецификацию yaml, хотя sls deploy не показал ошибок, лямбда-консоль для конкретной функции была ошибочной The file services/tv/get/handler.js could not be found. Make sure your handler upholds the format: file-name.method. Так что просто удалите это из спецификации yaml, и она будет работать.

asr9 26.07.2018 19:27

в данном случае проблема не в этом, это действительно был запрос зависимости, который вызывал ошибки, когда я переключаюсь на использование модуля https, все работает нормально. Я все еще не уверен, в чем проблема с Request, но действительно ли это меня раздражает. В любом случае спасибо за помощь @ASR

Alex J Wilkinson 27.07.2018 06:33

Другие вопросы по теме