AWS Lambda:无法导入模块

时间:2016-09-02 00:52:05

标签: node.js amazon-web-services aws-lambda

请原谅我,我是Lambda和Node的全新人。

我正在尝试复制this git,使用AWS IoT按钮订购披萨。

我目前的代码是:

var pizzapi = require('dominos');

var myStore = new pizzapi.Store(
    {
        ID: 'Example'
    }
);

var myAddress = new pizzapi.Address(
        {
            Street: 'Example',
            City: 'Example',
            Region: 'Example',
            PostalCode: 'Example'
        }
    );

var myCustomer = new pizzapi.Customer(
    {
        firstName: 'Example',
        lastName: 'Example',
        address: myAddress,
        phone: 'Example',
        email: 'Example@gmail.com'
    }
);

var order = new pizzapi.Order(
    {
        customer: myCustomer,
        storeID: myStore.ID
    }
);

var cardNumber='Example';
var cardInfo = new order.PaymentObject();
cardInfo.Amount = order.Amounts.Customer;
cardInfo.Number = cardNumber;
cardInfo.CardType = order.validateCC(cardNumber);
cardInfo.Expiration = 'Example';
cardInfo.SecurityCode = 'Example';
cardInfo.PostalCode = 'Example';

order.Payments.push(cardInfo);

function orderDominos(event, context) {
  var clickType = event.clickType;
  switch(clickType.toLowerCase()) {
    case "single": {
      order.addItem(
          new pizzapi.Item(
              {
                  code: 'P_14SCREEN',
                  options: {},
                  quantity: 1
              }
          )
      );
      break;
    }
    case "double": {
        order.addItem(
          new pizzapi.Item(
              {
                  code: 'P_14SCREEN',
                  options: {},
                  quantity: 1
              }
          )
      );
      break;
    }
    case "long": {
        order.addItem(
          new pizzapi.Item(
              {
                  code: 'P_14SCREEN',
                  options: {},
                  quantity: 1
              }
          )
      );
      break;
    }
  }
  order.validate(
      function(result) {
          console.log("Order is Validated");
      }
  );
  order.price(
      function(result) {
            console.log("Order is Priced");
      }
  );
  order.place(
      function(result) {
          console.log("Price is", result.result.Order.Amounts, "\nEstimated Wait Time",result.result.Order.EstimatedWaitMinutes, "minutes");
          console.log("Order placed!");
          context.succeed(event);
      }
  );
}

exports.handler = orderDominos;

文件结构为:

  • orderDominos.js
  • node_modules /骨牌

我压缩文件,上传到Lambda,并将标题指向“index.handler”

我做错了什么?

编辑:错误

Unable to import module 'orderDominos': Error
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/var/task/node_modules/dominos/src/http-json.js:1:74)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)

7 个答案:

答案 0 :(得分:17)

就我而言,我提到Handlerindex.handler,但我的根文件名为app.js。将此更改为index.js

还要确保zip文件直接包含index.js, node_modules and package.json

应该是:

zip file --> index.js
             package.json
             node_modules

zip file --> some_folder_name --> index.js
                                  package.json
                                  node_modules

答案 1 :(得分:4)

在我更改了&#39; node_modules&#39;的权限后,这是我的权限问题。文件夹到777,压缩并上传,它工作。

答案 2 :(得分:1)

也遇到了这个问题。为我解决的是在Windows机器上意识到文件路径太长了。压缩后,我意识到node_modules的内容为空。我将文件复制到更高级别的路径,例如C:\ User \并压缩指定的文件。希望这有帮助!

答案 3 :(得分:0)

我遇到了同样的问题,并通过以下步骤解决了这个问题

  1. 不要使用mac中finder中提供的默认zip选项。 使用终端压缩
  2. cd foldername

    zip -r foldername.zip *

    1. 在您要在index.js文件中使用的所有js函数中使用exports。
    2. 在Javascript文件中说a.js

      var func = function(){
      
      }
      
      export.func = func ; 
      

      在index.js

      var a = require('a.js')
      exports.handler(event, context, callback){
      
      a.func
      
      }
      

答案 4 :(得分:0)

对我有用的是压缩以下文件并上传zip(在文件夹中进行npm安装后):

  • node_modules /
  • your_file1.js
  • your file2.js
  • your files.js
  • 的package.json
  • 包lock.json

答案 5 :(得分:0)

对于我们来说,这既不是路径问题也不是权限问题。之所以出现此错误,是因为我们在部署之前进行了npm prune --production的操作,并且有一些运行时程序包被错误地放置在devDependencies下,并且在该阶段被清除了。不幸的是,lambda只给出了模糊的错误消息。

答案 6 :(得分:-3)

安装

'npm install request' to the same folder of 
----> index.js
      package.json
      node_modules

zip这个并上传Lambda