【问题标题】:Unable to import module 'handler' aws lambda function in nodejs无法在 nodejs 中导入模块“处理程序”aws lambda 函数
【发布时间】:2019-02-08 07:37:00
【问题描述】:

我不断收到此错误,我不知道是什么原因造成的。

我有一个基于条件的 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)

【问题讨论】:

  • 发布您的完整代码。您从哪里需要handler.js?显示文件的完整路径。也请发布您的整个错误。
  • 这是完整的代码。我拥有的其他文件是 serverless.yaml,我现在将发布它以及 package、json 和 package-lock.json
  • 发布您的整个错误。这将有助于挖掘。
  • @HardikShah 发布了错误和 serverless.yaml

标签: node.js aws-lambda serverless-framework aws-serverless


【解决方案1】:

错误信息并没有太大帮助,但是我发现这个信息通常是由于丢失了 npm 包引起的。如果您在 AWS 控制台中测试 lambda,您可以看到具体的详细信息。

【讨论】:

  • "如果你在 AWS 控制台中测试 lambda,你可以看到具体的细节" 这个评论是金。在其他任何地方都找不到此帮助。谢谢@aarkerio
【解决方案2】:

好的,我通过删除我的 package.json 然后再次添加它并安装 NOT 作为我的包的开发依赖项来解决它并且它工作。

【讨论】:

  • package.json 中删除what?再次添加什么
  • @CodyBugstein 删除整个 package.json 文件,使用 npm init 再次添加该文件,全新安装我所依赖的所有模块,但 不是 作为开发依赖项。这对我有用,希望有帮助。
  • @CodyBugstein 我确信有很多方法可以做到这一点,但我就是这样做的,它对我有用。如果您来这里批评我的方式并否决对我最有效的答案,那么至少提供一些专业知识,说明为什么以及应该采取哪些措施来避免将来出现这个问题。
  • 我确实在评论中提供了一个更好的解决方案,你的解决方案还可以,但是当有些东西应该真正留在 devDependencies 中时,它可能会导致人们将所有东西都放在依赖项中。
  • @squeekyDave npm init(对无服务器 json 执行此操作)我在 python 中编写了 lambda serverless。我应该如何取回已删除的 package-lock.json ?
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    在我的例子中,我发现我的 lambdas 同时使用了 python 和 nodejs,但没有将 nodejs lambda 函数的运行时环境设置为 nodejs。以前,我的 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
    

    只需给出 nodejs 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2020-07-08
      • 2020-05-02
      • 2019-01-05
      相关资源
      最近更新 更多