Nodemailer & e js - Рендеринг шаблона из другой папки - PullRequest
0 голосов
/ 15 января 2020

Я использую node.js, express, e js и nodemail. Я могу отправлять письма с пользовательским шаблоном, если шаблон «mail.e js» находится в той же папке, что и контроллер «contact.e js», например:

// 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'
});
...

Это работает нормально ... но теперь я хочу иметь шаблон в другой папке, но я изо всех сил пытаюсь вызвать / получить к нему доступ. Как должен выглядеть e js .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'
});
...

1 Ответ

0 голосов
/ 15 января 2020

__dirname сообщает вам абсолютный путь к каталогу, содержащему текущий исполняемый файл.

По умолчанию E JS будет искать файл относительно process.cwd(), каталога, в котором был запущен процесс 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'
});
...