无服务器框架与AWS Lambda错误"找不到模块"

43

我正在尝试使用Serverless框架创建一个Lambda函数,该函数使用open weather NPM模块。然而,我遇到了以下异常,但我的node_modules包含特定的库。

我已经成功运行了示例(https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb),现在正在破解以添加节点模块来集成open weather 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);          
  };
13个回答

0

我的情况是配置创建AWS Lambda函数的参数。正确的处理程序字符串为(最后一行):

Resources:
  StringResourceName:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: myFileName.handler

其中myFileName是我用作压缩文件的文件名。


-1

对于使用serverless-offline并在本地开发期间使用虚拟环境开发Python Lambda函数的任何人,需要停用您的环境,完全删除它,并重新创建它。安装所有Python要求,然后再试一次。这对我有用。


-2
对我来说,问题是处理程序文件名包含一个点号。 main-handler.graphql.js 导致 serverless "Error: Cannot find module 'main'. 当我将文件更改为 main-handler-graphql.js 时,一切正常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接