У меня есть довольно простой 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, и теперь все запросы запускаются правильно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы включаете правильный файл? Ваш код handler.js, похоже, имеет только одну функцию hello, на которую нужно ссылаться как на handler.hello. Если это был просто фиктивный файл, чтобы задать вопрос здесь, попробуйте указать функцию в yaml как handler.<function-name>.
да, в основном есть фиктивный файл, который я забыл удалить, но yml указывает на services / tv / get / handler, так что он должен работать наверняка?
Я также попытался реструктурировать и просто изменить базовый обработчик на тот, который находится в service / tv / get, и у него все еще та же проблема, но он продолжает работать локально.
Я имел в виду, обновите вашу спецификацию 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, и она будет работать.
в данном случае проблема не в этом, это действительно был запрос зависимости, который вызывал ошибки, когда я переключаюсь на использование модуля https, все работает нормально. Я все еще не уверен, в чем проблема с Request, но действительно ли это меня раздражает. В любом случае спасибо за помощь @ASR
Можете ли вы отредактировать вопрос, чтобы было понятнее? Я думал, у вас проблемы с загрузкой функции обработчика -
Unable to import module 'services/tv/get/handler': Error. Может быть полезно другим.