【问题标题】:Cannot find module 'nodemailer' in AWS Lambda在 AWS Lambda 中找不到模块“nodemailer”
【发布时间】:2016-11-01 23:20:01
【问题描述】:

我有一个简单的 nodejs 代码,可以使用 AWS Lambda 函数和 SES 服务发送测试电子邮件。

我能够以所有适当的访问权限和要求等将我的功能部署到 AWS...

不幸的是,每当我在 AWS Lambda 控制台中测试我的函数时,我都会收到错误“找不到模块 'nodemailer'”,这是我在下面的代码中需要的。

从我的项目结构来看,我似乎已经正确安装了它,或者可能没有。

我已经被这个问题困扰了好几天了,我在这里做错了什么?顺便说一句,我是 nodejs 和 aws 的新手。

提前谢谢你。

注意:我尝试在命令中运行它,它工作正常,我能够收到电子邮件。 命令:node handler.js

项目截图:

Project Structure

Nodejs 代码:

'use strict';

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
  host: 'email-smtp.us-east-1.amazonaws.com',
  port: 587,
  auth: {
    user: 'USER_XXX',
    pass: 'PASSWORD_XXX'
  }
});

var text = 'Hi,\r\n\r\n'
     + 'This email is a test email!\r\n\r\n'
     + 'This is sent using NodeMailer module in Nodejs thru AWS SES SMTP Host: email-smtp.us-east-1.amazonaws.com.\r\n\r\n'
     + 'Thanks!';

var mailOptions = {
  from: 'ses@aws.net',
  to: 'me@aws.net',
  subject: 'Test Email (NodeMailer & AWS SES)',
  text: text
};

module.exports.handler = function(event, context) {
  console.log('Email Sending...');
    transporter.sendMail(mailOptions, function(error, info){
          if(error){
            console.log(error);
          }else{
            console.log('Message sent');
          }
      });
};

Lambda 测试错误消息:

{
  "errorMessage": "Cannot find module 'nodemailer'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:276:25)",
    "Module.require (module.js:353:17)",
    "require (internal/module.js:12:17)",
    "Object.<anonymous> (/var/task/handler.js:2:18)",
    "Module._compile (module.js:409:26)",
    "Object.Module._extensions..js (module.js:416:10)",
    "Module.load (module.js:343:32)",
    "Function.Module._load (module.js:300:12)",
    "Module.require (module.js:353:17)"
  ]
}

【问题讨论】:

  • 你的包文件在哪里?
  • 你应该先在你的电脑上安装模块nodemailer,然后复制所有文件(所有文件和文件夹(我看到的测试项目))并输入到lambda
  • 嗨,Adrian,您是指 package.json 文件吗?对不起,我真的是新来的……
  • 嗨,Thanh,我已经这样做了,事实上我记录了我是如何做到的。
  • 第 1 步 - 创建用户 - 转到 AWS 仪表板 - 选择 IAM - 创建用户 - 授予管理员访问权限 第 2 步 - 安装无服务器框架命令:npm i serverless -g 命令:无服务器帮助或 sls 帮助显示命令列表第 3 步 - 创建项目命令:sls project create --> 为问题提供必要信息 --> sls 将创建项目结构(使用 Atom 打开)

标签: node.js amazon-web-services lambda


【解决方案1】:

您需要确保将 nodemailer 作为 package.json 中的依赖项之一。

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 2021-04-20
    • 2017-10-14
    • 1970-01-01
    • 2019-05-03
    • 2016-12-21
    • 2021-12-16
    • 2021-09-13
    • 2021-11-20
    相关资源
    最近更新 更多