微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nodemailer-express-handlebars |错误:ENOENT:模板没有此类文件或目录

如何解决nodemailer-express-handlebars |错误:ENOENT:模板没有此类文件或目录

我遇到一个问题,其中nodemailer-express-handlebars输出错误

[Error: ENOENT: no such file or directory,open ''] {
  errno: -2,code: 'ENOENT',syscall: 'open',path: '/Users/person/Code/app/api/controllers/templates/undefined.hbs'

我的设置如下:

 const handlebarOptions = {
    viewEngine: {
      extName: ".hbs",partialsDir: path.resolve(__dirname,"templates"),defaultLayout: false
    },viewPath: path.resolve(__dirname,extName: ".hbs"
  };

  transporter.use('compile',hbs(handlebarOptions));

并通过以下方式发送电子邮件

 let mailOptions = await transporter.sendMail({
    from: '"Test - No Reply" <test@test.com>'
    to: 'someEmail@gmail.com,subject: "Hello ✔",template: 'welcome',});

奇怪的是,即使它说找不到文件,我仍然收到电子邮件。如何解决错误,并使nodemailer-express-handlebars无法将文件视为“ undefined.hbs”?

更新:

我在nodemailer中将“ welcome”更改为“ welcome.hbs”,现在的错误是它找不到“ welcome.hbs.hbs”。这是有道理的,您认为解决方案是删除“ .hbs”并使其“受欢迎”,但随后我们回到了原始错误“ undefined.hbs”。

此外,如果我将模板更改为“ welcome2”,则说找不到“ welcome2.hbs”。奇怪的是,仿佛只有在模板文件文件名匹配时才变得未定义。

解决方法

它不应该是模板属性,而应该是sendMail对象中的html属性:

 let mailOptions = await transporter.sendMail({
    from: '"Test - No Reply" <test@test.com>'
    to: 'someEmail@gmail.com,subject: "Hello ✔",html: './templates/welcome.hbs',});
,

我的解决方案是:

const path = require('path')
const nodemailer = require('nodemailer');
const hbs = require('nodemailer-express-handlebars')

const { host,port,user,pass } = require('../config/mail.json')

var transport = nodemailer.createTransport({
    host,auth: { user,pass },});

const handlebarOptions = {
    viewEngine: {
        extName: ".html",partialsDir: path.resolve('./src/resources/mail'),defaultLayout: false,},viewPath: path.resolve('./src/resources/mail'),extName: ".html",};

transport.use('compile',hbs(handlebarOptions));

module.exports = transport;

我项目中的模板文件夹是:“src/resources/mail”

const mailer = require('../../modules/mailer');

mailer.sendMail({
            to: email,from: 'mail.example@examplemail.com',template: 'auth/forgot_password',context: { token },(err) => {
            if (err){
                console.log(err)
                return res.status(400).send({ error: 'Cannot send forgot password email'});
            }
            return res.send();
        })

我的模板文件是“auth/forgot_password.html”

在我的项目中,handlebarOptions 的配置出现了问题,解决方法是:

const handlebarOptions = {
    viewEngine: {
        extName: ".html",};
,

回答我自己的问题。该问题似乎与使其具有回调的异步功能有关,该回调导致了某种类型的未定义问题。

有关代码参考的深入解答,您可以在此处查看解决方案:https://github.com/yads/nodemailer-express-handlebars/issues/43

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。