AWS Lambda错误:“无法find模块”/ var / task / index“”
Node.js Alexa任务问题
我目前正在通过AWS Lambda编写一个Node.js Alexa任务,并且我一直在尝试编写一个函数,它从OpenWeather API接收信息并将其parsing为一个名为weather
的variables。 相关代码如下:
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中无数次地运行了这个代码片段,而且它看起来是完美无缺的。 但是,当我将其压缩到一个包并将其上载到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)" ] }
我search了无数的文章,并安装了模块js,请求,以及许多其他的应该让代码运行的Node模块,但似乎没有解决这个问题。 这是我的目录,以防万一:
- planyr.zip - index.js - node_modules - package.json
有谁知道这个问题可能是什么? 非常感谢你提前。
修复! 问题是试图压缩使用我的Mac的压缩软件,本身。 当你在包含你的index.js,node_modules等文件的目录中时,你最好在terminal中运行下面的代码。
zip -r ../yourfilename.zip *
这可能是部署zip中的文件的权限问题。 尝试chmod 777
你的文件,然后把它们打包成一个zip文件。
更新到接受的答案,这个错误发生,这意味着你的zip不是在有效的forms,其中aws的要求。
如果你双击zip文件,你会在你的代码文件中find你的文件夹,但是lambda希望当你双击zip文件时,它会显示直接的代码文件。
为了达到这个目的:
open terminal cd your-lambda-folder zip -r index.zip *
然后将index.zip上传到lambda
在我的情况下,我不得不更换
exports.handler = function eventHandler (event, context) {
同
exports.handler = function (event, context, callback) {