无法在Node.js中导入'module 'handler' AWS Lambda函数

6
我一直遇到这个错误,不知道是什么原因导致的。
我有一个基于条件的API,它会将信息发布到另一个API,但是我在我的封装API中遇到了这个错误。
以下是代码... handler.js
'use strict';
const axios = require('axios');

module.exports.thumbnailWrapperAPI = (event, context, callback) => {


  const incomingData = JSON.parse(event.body);
  if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
    const newLocal = 'some endpoint...';
    // call image resizing API...
    axios.post(newLocal,{
      source: incomingData.source,
      target: incomingData.target,
      width: incomingData.width
    })
    .then(response => callback(null,response))
    .catch(error => callback(error))

  } else if(incomingData.source.includes('html')) {
    // handle HTML
  } else {
    //...
  };
};

serverless.yaml

service: thumbnailWrapperAPI 
provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1

functions:
  thumbnailWrapperAPI:
    handler: handler.thumbnailWrapperAPI
    events:
      - http:
          path: generatethumbnail/
          method: post
          cors: true

希望能得到您的建议。

错误信息:

Unable to import module 'handler': Error
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/task/handler.js:2:15)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)

1
请发布您的完整代码。您从哪里要求“handler.js”?显示文件的完整路径。并且请同时发布您的整个错误信息。 - Hardik Shah
这是完整的代码。我还有其他文件,包括serverless.yaml,我现在会发布它,以及package.json和package-lock.json。 - squeekyDave
请发布您的完整错误信息。这将有助于深入挖掘问题。 - Hardik Shah
@HardikShah发布了错误和serverless.yaml。 - squeekyDave
4个回答

8
错误信息并不是很有用,但我发现这种消息通常是由于丢失npm包而引起的。如果您在AWS控制台中测试lambda函数,则可以查看具体详情。

3
如果你在AWS控制台中测试Lambda函数,你可以看到具体的细节。这条评论非常有价值,在其他地方无法找到这样的帮助。感谢@aarkerio。 - Chris

3

好的,我通过删除我的package.json文件,然后重新添加并安装作为开发人员依赖项的软件包来解决了问题。


3
package.json 中移除什么?再次添加什么? - CodyBugstein
删除整个package.json文件,使用npm init重新添加文件,并安装所有我所依赖的模块,但不要作为dev依赖项。这对我有用,希望能帮到你。 - squeekyDave
@CodyBugstein 我相信有很多种方法可以做到这一点,但这是我所采用的方式,并且它对我起作用。如果你来这里批评我的方式并且给我投反对票,那么请至少提供一些专业知识,解释为什么以及未来应该如何避免这个问题。 - squeekyDave
我在评论中提供了更好的解决方案,你的解决方案还可以,但可能会导致人们将所有东西都放在依赖项中,而有些东西确实应该留在devDependencies中。 - CodyBugstein
@squeekyDave npm init(用于无服务器JSON),我已经用Python编写了lambda serverless。我该如何恢复我的已删除的package-lock.json文件? - Chaitanya Bapat
@ChaitanyaBapat 我不确定一个 Python 项目应该如何运作,因为这是一个 Node 项目。 - squeekyDave

2

当您使用错误路径要求模块或文件时,也会出现此错误。换句话说,需要一个不存在的模块/文件。

它可能是自定义模块或npm。

请仔细检查所有模块导入路径,并确保它们准确无误。


2

在我的情况下,我同时使用了Python和Node.js来编写Lambda函数,但是没有将Node.js Lambda函数的运行环境设置为Node.js。之前,我的serverless.yml文件看起来类似于这样:

provider:
  name: aws
  runtime: python3.7
  stage: dev
  region: eu-west-1 
  profile: my-profile

functions:
  nodejs-func:
    handler: nodejs_func.handler
    events:
      - websocket:
          route: nodejs-func
  python-func:
    handler: python_func.handler
    events:
      - websocket:
          route: python-func

只需为Node.js Lambda提供运行时环境即可解决此问题:

provider:
  name: aws
  runtime: python3.7
  stage: dev
  region: eu-west-1 
  profile: my-profile

functions:
  nodejs-func:
    handler: nodejs_func.handler
    runtime: nodejs10.x # Provide the runtime environment for lambda func
    events:
      - websocket:
          route: nodejs-func
  python-func:
    handler: python_func.handler
    events:
      - websocket:
          route: python-func

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接