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中无数次运行了这个片段,它似乎运行得很完美。但是,当我将其压缩到一个包并将其上传到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)"
]
}
我搜索了无数篇文章,并安装了模块-j,请求以及许多其他应该使代码运行的Node模块,但似乎没有解决这个问题。这是我的目录,以防万一:
- planyr.zip
- index.js
- node_modules
- package.json
有谁知道这个问题是什么?非常感谢你。
答案 0 :(得分:212)
修正了它!我的问题是我试图在Finder中使用Mac的内置压缩功能压缩文件。
如果您是像我这样的Mac用户,当您位于项目的根目录(包含index.js
,node_modules
的文件夹时,应该在终端中运行以下脚本,等文件)。
zip -r ../yourfilename.zip *
对于Windows:
Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.zip
答案 1 :(得分:21)
更新为已接受的答案:发生此错误时,表示您的zip文件不是AWS所需的有效格式。
如果双击zip,你会在你的代码文件中找到你的文件夹,但lambda想要当你双击zip时它会显示直接的代码文件。
实现这一目标:
open terminal
cd your-lambda-folder
zip -r index.zip *
然后,将index.zip
上传到AWS Lambda。
答案 2 :(得分:16)
检查文件名和处理程序名称是否相同:
这意味着zip
文件具有导出bundle.js
函数的handler
文件:
exports.handler = (event, context, callback) => {//...}
答案 3 :(得分:4)
这可能是部署zip中文件的权限问题。
尝试chmod 777
您的文件,然后将其打包成zip文件。
答案 4 :(得分:3)
就我而言,这是因为我的处理程序文件位于内部src目录中。
我必须从以下位置更改Lambda中的'Handler'属性:
index.handler
到
src/index.handler
答案 5 :(得分:2)
答案 6 :(得分:0)
在我的情况下,我不得不替换
exports.handler = function eventHandler (event, context) {
与
exports.handler = function (event, context, callback) {
答案 7 :(得分:0)
在Windows中使用lambci/lambda:nodejs8.10
时出现此错误。
我已经尝试了上面列出的所有解决方案,但没有一个可以帮助我解决问题(即使错误堆栈看起来与问题相同)。
这是我的简单解决方案:
--entrypoint
标志运行容器,以查明文件是否已安装到容器中。事实证明,我的Docker桌面可能遇到共享驱动器问题。 docker
命令,也可以打开Docker Desktop设置来应用。 答案 8 :(得分:0)
在我的情况下,这是由Node内存不足引起的。我通过在--memory-size 1500
命令中添加aws lambda create-function ...
来解决了这个问题。