我尝试使用无服务器框架创建使用开放天气NPM模块的Lambda函数。但是,我收到以下异常,但我的node_modules包含特定的库。
我已成功运行示例(https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb),现在正在黑客添加节点模块以集成开放天气API。
Endpoint response body before transformations: {"errorMessage":"Cannot find module 'Openweather-Node'","errorType":"Error","stackTrace":["Module.require (module.js:353:17)","require (internal/module.js:12:17)","Object.<anonymous> (/var/task/todos/weather.js:4:17)","Module._compile (module.js:409:26)","Object.Module._extensions..js
我的代码
'use strict';
const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies
var weather = require('Openweather-Node');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.weather = (event, context, callback) => {
const params = {
TableName: process.env.DYNAMODB_TABLE,
Key: {
id: event.pathParameters.id,
},
};
weather.setAPPID("mykey");
//set the culture
weather.setCulture("fr");
//set the forecast type
weather.setForecastType("daily");
const response = {
statusCode: 200,
body: "{test response}",
};
callback(null, response);
};
答案 0 :(得分:13)
在执行npm install
之前,您在工作目录中serverless deploy
了吗? aws-sdk
节点模块可用于所有lambda函数,但是对于所有其他节点依赖项,您必须安装它们,以便在部署时将它们与lambda打包在一起。
您可以在无服务器存储库中找到此问题(https://github.com/serverless/serverless/issues/948)。
答案 1 :(得分:2)
如果它适用于这个答案,我不知道,但如果有人只需要刷新大脑,我忘记导出我的处理程序并且正在导出文件,正在寻找不存在的默认导出...>
从此改变...
handler: foldername/exports
这...
handler: foldername/exports.handler
答案 2 :(得分:1)
如果您有外部依赖项,则需要执行程序包部署。 请看这个答案
参考
http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html
答案 3 :(得分:1)
当我在package.json
中将所有内容从devDependencies
移到dependencies
时,我修复了此错误。
欢呼
答案 4 :(得分:0)
我在无服务器框架上遇到同样的问题,无法部署多个lambda函数。我通过以下步骤修复了
handler: foldername/exports.handler
serverless deploy
这应该可以解决您的问题
答案 5 :(得分:0)
遇到了同样的问题。使用了无服务器节点模板,但未执行
npm init
之后。