代码之家  ›  专栏  ›  技术社区  ›  Philipp M

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

  •  0
  • Philipp M  · 技术社区  · 5 年前

    我使用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'
    });
    ...
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   Dilshan    5 年前

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

    默认情况下,EJS将查找相对于 process.cwd() ,Node.js进程启动的目录。 __目录名 是JS文件所在的目录( contact.js )如果你不想加入 __目录名 ,你需要创建相对于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'
    });
    
    推荐文章