1. ホーム
  2. javascript

[解決済み] AWS Lambdaのエラーです。"Cannot find module '/var/task/index'" と表示されました。

2023-03-14 10:16:11

質問

Node.js Alexa タスクの問題

現在、AWS Lambda経由でNode.jsのAlexaタスクをコーディングしていますが、OpenWeather APIから情報を受け取り、それをパースして weather . 該当のコードは以下の通りです。

var request = require('request');
var weather = "";
function isBadWeather(location) {
      var endpoint = "http://api.openweathermap.org/data/2.5/weather?q=" + location + "&APPID=205283d9c9211b776d3580d5de5d6338";
      var body = "";
      request(endpoint, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                  body = JSON.parse(body);
                  weather = body.weather[0].id;
            }
      });
}

function testWeather()
{
      setTimeout(function() {
      if (weather >= 200 && weather < 800)
            weather = true;
      else
            weather = false;
      console.log(weather);
      generateResponse(buildSpeechletResponse(weather, true), {});
      }, 500);
}

このスニペットをCloud9や他のIDEで数え切れないほど実行しましたが、完璧に動作しているように見えます。しかし、これをzipでパッケージ化してAWS Lambdaにアップロードすると、以下のエラーが発生します。

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

module-js、request、その他多くのNodeモジュールをインストールし、このコードを実行できるようにしましたが、この問題を解決するものは何もないようです。念のため、私のディレクトリを示します。

- planyr.zip
   - index.js
   - node_modules
   - package.json

どなたか、この問題が何であるかご存知ですか?

どのように解決するのですか?

修正しました! 私の問題は、Finder で Mac の内蔵圧縮機能を使ってファイルを圧縮しようとしたことでした。

もしあなたが私のような Mac ユーザーなら、プロジェクトのルート ディレクトリ (あなたの を含むフォルダ) にいるときに、ターミナルで次のスクリプトを実行するべきです。 index.js , node_modules などのファイル)。

zip -r ../yourfilename.zip *

Windowsの場合。

Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.zip