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

问题描述 投票:0回答:1

我正在使用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'
});
...

效果很好...但是现在我想将模板放在其他文件夹中,但是我在努力调用/访问它。 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'
});
...
node.js express ejs nodemailer
1个回答
0
投票

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

默认情况下,EJS将查找相对于process.cwd()的文件,C0是启动Node.js进程的目录。 __dirname是您的JS文件(contact.js)所在的目录。如果您不想加入__dirname,则需要相对于Node.js进程的启动路径进行设置。意思是,

如果是文件夹结构,

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

const output = await ejs.renderFile("/views/mail.ejs", {
  test: 'Test'
});
© www.soinside.com 2019 - 2024. All rights reserved.