【发布时间】:2019-06-15 16:55:25
【问题描述】:
我正在尝试通过 HTML 模板发送电子邮件,该模板位于名为“view”的文件夹下的同一路径中。 HTML 模板名称是“index.handlebars”。但它给出了一些奇怪的路径错误,尽管我认为路径是绝对正确的。 谁能帮我解决这个问题?
TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收类型未定义 在 validateString (internal/validators.js:125:11) 在 Object.resolve (path.js:161:7) 在 ExpressHandlebars._resolveLayoutPath (E:\NODE JS 示例\node-practice-one\node_modules\express-handlebars\lib\express-handlebars.js:342:17) 在 ExpressHandlebars。 (E:\NODE JS 示例\node-practice-one\node_modules\express-handlebars\lib\express-handlebars.js:223:35)
const express = require('express');
const path = require('path');
const nodemailer = require('nodemailer');
const hbs = require('nodemailer-handlebars');
const log = console.log;
// Step 1
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL || 'abcd@gmail.com', // TODO: your gmail account
pass: process.env.PASSWORD || 'abcd' // TODO: your gmail password
}
});
router.post('/send_mail', (req, res, next) => {
// Step 2
transporter.use(
'compile',
hbs({
viewEngine: 'express-handlebars',
viewPath: './views/'
})
);
// Step 3
let mailOptions = {
from: 'xxx@gmail.com', // TODO: email sender
to: 'yyy@gmail.com', // TODO: email receiver
subject: 'Nodemailer - Test',
text: 'Wooohooo it works!!',
template: 'index',
context: {
name: 'test user'
} // send extra values to template
};
// Step 4
transporter.sendMail(mailOptions, (err, data) => {
console.log(err);
if (err) {
return log('Error occurs');
}
return log('Email sent!!!');
});
});
请给我建议,我应该怎么做才能修复错误。
【问题讨论】:
-
您应该使用(我认为)
nodemailer-express-handlebarshttps://www.npmjs.com/package/nodemailer-express-handlebars,因为您使用的软件包已被弃用。 github页面指向nodemailer-express-handlebars。 -
@AritraChakraborty:我也用“nodemailer-express-handlebars”包进行了测试,但它也给出了错误。错误:部分目录必须是字符串或配置对象
-
我已经用 'nodemailer-express-handlebars' 包解决了上述问题。有人在此链接中发布了答案,它对我有用。 github.com/yads/nodemailer-express-handlebars/issues/22
标签: javascript node.js express handlebars.js nodemailer