web-dev-qa-db-ja.com

AWS Lambda:モジュールをインポートできません

許してください、私はラムダとノードで全く新しいです。

AWS IoTボタンを使用してピザを注文するために this gitを複製しようとしています。

私の現在のコードは:

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: '[email protected]'
    }
);

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/dominos

ファイルを圧縮し、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)
14
Ben Richards

私の場合、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
20
Prasanth Jaya

'node_modules'フォルダーのアクセス許可を777に変更し、zip圧縮してアップロードした後、それは機能していました。

4

この問題にも遭遇しました。私にとってそれを解決したのは、Windowsマシンでファイルパスが長すぎることを認識することでした。 zip圧縮した後、node_modulesの内容が空であることに気付きました。 zip用のファイルをより高いレベルのパスにコピーしました。 C:\ User \および指定されたファイルを圧縮します。お役に立てれば!

1
Gabriel Wamunyu

私のために働いたのは、次のファイルを圧縮してZIPをアップロードすることでした(フォルダにnpmインストールを行った後):

  • あなたのfile1.js
  • あなたのfile2.js
  • あなたのfiles.js
  • package.json
  • package-lock.json
0
mnng

私は同じ問題を抱えていて、以下の手順で解決しました

  1. macのFinderで提供されるデフォルトのZipオプションを使用しないでください。ターミナルを使用して圧縮する

cd foldername

Zip -r foldername.Zip *

  1. index.jsファイルで使用するすべてのjs関数でエクスポートを使用します。

Javascriptファイルa.jsで言う

var func = function(){

}

export.func = func ; 

Index.jsで

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

a.func

}
0
Ranjith Ramesh