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
有谁知道这个问题是什么?非常感谢你提前。
固定它!我的问题是我试图在Finder中使用Mac的内置压缩功能压缩文件。
如果您是Mac用户,就像我一样,当您位于项目的根目录(包含index.js
,node_modules
等文件的文件夹)时,应在终端中运行以下脚本。
zip -r ../yourfilename.zip *
对于Windows:
Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.zip
更新为已接受的答案:发生此错误时,表示您的zip文件不是AWS所需的有效格式。
如果双击zip,你会在你的代码文件中找到你的文件夹,但lambda想要当你双击zip时它会显示直接的代码文件。
为达到这个:
open terminal
cd your-lambda-folder
zip -r index.zip *
然后,将index.zip
上传到AWS Lambda。
这可能是部署zip中文件的权限问题。在将文件打包为zip文件之前,请先尝试chmod 777
文件。
在我的情况下,这是因为我在内部src目录中有处理程序文件。
我不得不改变Lambda中的'Handler'属性:
index.handler
至
src/index.handler
在我的情况下,我不得不更换
exports.handler = function eventHandler (event, context) {
同
exports.handler = function (event, context, callback) {
当我在Windows中使用lambci/lambda:nodejs8.10
时出现此错误。
我尝试了上面列出的所有解决方案,但没有一个可以帮助我处理我的问题(即使错误堆栈看起来与问题相同)。
这是我的简单解决方案:
--entrypoint
标志运行容器以查明文件是否已装入容器中。事实证明,我的Docker桌面可能存在共享驱动器问题。docker
命令或只是打开Docker Desktop设置来应用。