Nodemailer & ejs - 从另一个文件夹渲染模板

Nodemailer & ejs - Render template from another folder

我正在使用 node.js、express、ejs 和 nodemail。如果模板 'mail.ejs' 与控制器 'contact.ejs' 在同一文件夹中,我可以使用自定义模板发送邮件,如下所示:

// Folder structure
controllers
    contact.js
    mail.ejs

// contact.js 
const nodemailer = require('nodemailer');
const ejs = require("ejs");

...
const output = await ejs.renderFile(__dirname + "/mail.ejs", {
  test: 'Test'
});
...

它工作正常...但现在我想将模板放在不同的文件夹中,但我很难 call/access 它。 ejs.renderFile(?) 应该如何拥有这个文件夹结构:

// Desired folder structure 
controllers
    contact.js
views   
    mail.ejs

// contact.js 
const nodemailer = require('nodemailer');
const ejs = require("ejs");

...
const output = await ejs.renderFile(??????, {
  test: 'Test'
});
...

__dirname 告诉您包含当前执行文件的目录的绝对路径。

默认情况下,EJS 将查找与 process.cwd() 相关的文件,Node.js 进程启动的目录。 __dirname 是您的 JS 文件 (contact.js) 所在的目录。如果您不想加入 __dirname,您需要将路径设置为相对于 [=25] 的位置=] 进程启动。也就是说,

如果文件夹结构是,

Root
   server.js <--- EJS look for relative paths from here
   views
      -mail.ejs

而且,

const output = await ejs.renderFile("/views/mail.ejs", {
  test: 'Test'
});