web-dev-qa-db-fra.com

AWS Lambda: impossible d'importer le module

veuillez me pardonner, je suis totalement nouveau chez Lambda et Node.

J'essaie de répliquer this git pour commander une pizza en utilisant un bouton AWS IoT.

Mon code actuel est:

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;

La structure du fichier est la suivante:

  • orderDominos.js
  • node_modules/dominos

J'ai compressé les fichiers, téléchargés sur Lambda et pointé l'en-tête sur "index.handler"

Qu'est-ce que je fais mal?

Modifier: l'erreur

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

Dans mon cas, j'ai mentionné Handler comme index.handler mais mon nom de fichier racine est app.js. Changer ceci en index.js travaillé.

Assurez-vous également que le fichier Zip a votre index.js, node_modules and package.json directement.

Devrait être:

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

Ne pas

Zip file --> some_folder_name --> index.js
                                  package.json
                                  node_modules
20
Prasanth Jaya

C'était un problème d'autorisation pour moi, après avoir changé les autorisations pour le dossier 'node_modules' en 777, compressé et téléchargé, cela a fonctionné.

4
Benjamin Guttmann

Ran dans ce problème aussi. Ce qui m'a résolu, c'est de réaliser que le chemin du fichier était trop long sur une machine Windows. Après avoir zippé, j'ai réalisé que le contenu de node_modules était vide. J'ai copié les fichiers pour les compresser vers un chemin de niveau supérieur, par exemple C:\User\et zippé les fichiers spécifiés. J'espère que cela t'aides!

1
Gabriel Wamunyu

Ce qui a fonctionné pour moi a été de compresser les fichiers suivants et de télécharger le Zip (après avoir fait l'installation de npm dans le dossier):

  • node_modules /
  • your_file1.js
  • votre fichier2.js
  • vos fichiers.js
  • package.json
  • package-lock.json
0
mnng

J'ai eu le même problème et l'ai résolu en suivant les étapes ci-dessous

  1. n'utilisez pas l'option Zip par défaut fournie dans le Finder sur mac. utiliser le terminal pour Zip

nom de dossier cd

Zip -r foldername.Zip *

  1. utilisez les exportations dans toutes vos fonctions js que vous souhaitez utiliser dans le fichier index.js.

Dites dans le fichier Javascript a.js

var func = function(){

}

export.func = func ; 

Dans index.js

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

a.func

}
0
Ranjith Ramesh