找不到模块

Can not Find Module

我在 amazon alexa 中做了一个自定义技能,当在 AWS 中测试 Node js 代码作为 LAMBDA 函数时,它给出了以下错误:

{
  "errorMessage": "Cannot find module '/var/task/index'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:417:25)",
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)"
  ]
}

这是连接到 firebase 并更新其内容的代码

const firebase = require('firebase');

exports.handler = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;  //<---Important

    var config = {
      apiKey: 'AIzaSyBQJasmuj2yzlkuXFwJ5-wL2kt0UMQ2V18',
      authDomain: 'deftdev-a2416.firebaseapp.com',
      databaseURL: 'https://deftdev-a2416.firebaseio.com',
      storageBucket: 'deftdev-a2416.appspot.com'
    };
    //firebase.initializeApp(firebaseConfig);

    //const db = firebase.database();

    if(firebase.apps.length == 0) {   // <---Important!!! In lambda, it will cause double initialization.
        firebase.initializeApp(config);
    }

    firebase.database().ref('rooms/' +'HPOQhC9smxUxSGhM1XlBtweiNDE3/'+'roomdetails/01/1/appliance/0/'+).update({
        toggle:1
    });
};

主要是因为压缩文件的方式导致了问题。而不是压缩根文件夹,你必须 select 所有文件并像下面那样压缩它,

请上传所有文件和文件夹,包括您的 node_modules 文件夹(如果有的话),

只需检查您的入口点文件名,如果它是 Index.js,然后在 AWS Lambda 函数入口点中提供相同的名称。这将有助于

为了完整起见,在使用诸如无服务器框架之类的东西时,如果您使用比 AWS 支持的更高版本的节点在本地安装节点模块,您可能会遇到非常相似的错误。

解决方案是确保在执行 npm i

时使用与 Lambda 中相同的 node/npm 版本