Node.js NodeEmailer express Handlebar |错误:eNote:没有用于模板的此类文件或目录

Node.js NodeEmailer express Handlebar |错误:eNote:没有用于模板的此类文件或目录,node.js,express,handlebars.js,nodemailer,express-handlebars,Node.js,Express,Handlebars.js,Nodemailer,Express Handlebars,我遇到一个问题,NodeEmailer express Handlebar输出错误: [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 handlebarOptio

我遇到一个问题,NodeEmailer express Handlebar输出错误:

[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, "templates"),
    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',
  });
let mailpoptions=wait transporter.sendMail({
发件人:“‘测试—无应答’”
致:'someEmail@gmail.com, 
主题:“你好✔",
模板:“欢迎”,
});
奇怪的是,我仍然收到电子邮件,尽管它说找不到文件。我如何解决这个错误,让NodeEmailer express Handlebar不将文件视为“undefined.hbs”

更新:


我在NodeEmailer中将“welcome”改为“welcome.hbs”,现在的错误是找不到“welcome.hbs.hbs”。这是有道理的,您可能会认为解决方案是删除“.hbs”并使其成为“welcome”,但我们回到了最初的错误“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',
  });
let mailpoptions=wait transporter.sendMail({
发件人:“‘测试—无应答’”
致:'someEmail@gmail.com, 
主题:“你好✔",
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,
    port,
    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;
const handlebarOptions = {
    viewEngine: {
        extName: ".html",
        partialsDir: path.resolve('./src/resources/mail'),
        defaultLayout: false,
    },
    viewPath: path.resolve('./src/resources/mail'),
    extName: ".html",
};
我的项目中的模板文件夹是:“src/resources/mail”

我的模板文件是“auth/forget\u password.html”

在我的项目中,把手选项的配置出现了一个问题,解决方案是:

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,
    port,
    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;
const handlebarOptions = {
    viewEngine: {
        extName: ".html",
        partialsDir: path.resolve('./src/resources/mail'),
        defaultLayout: false,
    },
    viewPath: path.resolve('./src/resources/mail'),
    extName: ".html",
};

该位置是否存在welcome.hbs文件?是的。可以确认/Users/person/Code/app/templates/包含“welcome.hbs”好的。我认为它无法获取文件路径,因为您正在使用NodeEmailer的手柄。请尝试更改html属性值的路径,并将其设置为html属性而不是模板属性,在上面的co中de it仍然将模板显示为sendMail()中的属性我在NodeEmailer中将“welcome”改为“welcome.hbs”,现在的错误是找不到“welcome.hbs.hbs”。这是有道理的,您会认为解决方案是删除“.hbs”并使其成为“welcome”,但我们又回到了“undefined.hbs”的原始错误。这是否让您了解您认为问题是什么?另外,如果我将模板改为“welcome2”,它说它找不到“welcome2.hbs”。这很奇怪……好像只有当模板文件与文件名匹配时它才变得未定义,这是它应该是的。不幸的是,这仍然会导致相同的错误,但发送的电子邮件的正文也是文本字符串。“/templates/welcome.hbs”。请使用它所在的路径,或者尝试>欢迎您也缺少partialsDir:\uu dirname+“/templates”在选项对象中我用partialsDir更新了我的问题。不幸的是,我仍然收到相同的问题!这解决了我的问题