我使用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' }); ...
__dirname 告诉包含当前执行文件的目录的绝对路径。
__dirname
默认情况下,EJS将查找相对于 process.cwd() ,Node.js进程启动的目录。 __目录名 是JS文件所在的目录( contact.js )如果你不想加入 __目录名 ,你需要创建相对于Node.js进程启动位置的路径。这意味着,
process.cwd()
__目录名
contact.js
如果文件夹结构是,
Root server.js <--- EJS look for relative paths from here views -mail.ejs
而且,
const output = await ejs.renderFile("/views/mail.ejs", { test: 'Test' });