node.js - AWS Lambda 使用 NodeJS 读取文件
问题描述
我尝试创建一个用于发送电子邮件的 lambda 函数。问题是我无法在 Lambda 上获取电子邮件模板路径。我收到的错误是:
"errorMessage": "ENOENT: 没有这样的文件或目录,打开 '/var/task/email_template.ejs'"
服务.js:
export const generateEmail = async (subject, text, email) => {
try {
const pathName = process.env.LAMBDA_TASK_ROOT
? path.resolve(process.env.LAMBDA_TASK_ROOT, 'email_template.ejs')
: path.resolve(__dirname, 'email_template.ejs')
const data = await ejs.renderFile(pathName, {
name: 'John Doe'
})
return {
from: '"Service" <no-reply.service@ses.com>',
to: email,
subject: subject,
text: text,
html: data
}
} catch (err) {
throw err
}
}
发送邮件.js
exports.handler = async (event, context, callback) => {
if (event.httpMethod === 'POST' && event.body) {
const req = JSON.parse(event.body)
const { name, email } = req
if (!email.match(/^[^@]+@[^@]+$/)) {
console.log('Not sending: invalid email address', body.email)
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'invalid_email',
message: 'Cannot send. Your email is invalid'
})
})
}
const config = {
accessKeyId: process.env.ACCESS_KEY,
secretAccessKey: process.env.SECRET_KEY
}
const transporter = nodemailer.createTransport(ses(config))
const mailOptions = await generateEmail('Hello ✔', 'Hello world', email)
try {
await transporter.sendMail(mailOptions)
return callback(null, {
statusCode: 204
})
} catch (err) {
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'general_error',
message: 'Please try again later',
full_error: err
})
})
}
}
return callback(null, {
statusCode: 400,
body: JSON.stringify({
error_code: 'missing_parameters',
message: 'Please provide your name and email'
})
})
}
generateEmail 函数在本地运行良好,但在 lambda 函数上不起作用。
任何帮助将不胜感激,谢谢!
解决方案
我终于自己找到了答案。原因是当 webpack 构建时,它忽略了我的 email_template.ejs 文件。
因此,我将此行添加到我的 webpack.config.js 中,以使其存在于我的 zip 输出中并且它运行良好。
(...),
plugins: [
new CopyWebpackPlugin([{ from: './src/email_template.ejs', to: './src' }])
]
推荐阅读
- javascript - React SSR 闪烁页面
- android - 如何从非父文件访问 TextView [Android]
- c - 二元炸弹第三阶段问题
- php - 无法使用 $_COOKIE 读取 Firefox 中的 cookie,但在检查时可以看到它们的值
- javascript - 迁移到 V5 后序列化记录问号而不是值
- c# - 为什么我必须输入两次回复才能注册?
- javascript - OWL Carousel 2 - 用圆点滑动超过 1 个项目
- html - 我需要帮助来修复我的下拉菜单在显示时移动
- javascript - 单击按钮时清除输入字段
- go - 缓冲通道中从未使用过的值会发生什么情况