代码之家  ›  专栏  ›  技术社区  ›  Harrison Cramer

修改带节点的HTML文件和动态生成的HTML

  •  0
  • Harrison Cramer  · 技术社区  · 6 年前

    我正在编写一个应用程序,它使用一个基本上已填写的HTML模板,并使用nodemailer发送电子邮件。我需要

    节点有一个id属性,我称之为“root”或“insert\u root”

            ... MORE HTML ...
    <tbody>
       <tr> 
         <td class="pc-fb-font" style="padding: 20px 20px; text-align: center; font-... 
            <div id="insert_root" style="margin-left: 20px"> 
             **Insert Here**
            </div>
         </td>
      </tr>
    </tbody>
            ... THE REST OF THE HTML ...
    

    最简单最可靠的方法是什么?我要插入的html内容如下所示:

    <p style="margin-bottom: 10px; margin-left: 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 600; line-height: 1.42; letter-spacing: -0.4px; color: #151515;">Coons, Christopher A:</p>
    <ul style="margin-left: 20px; margin-top: 0px; padding: 0px; ">
       <li style="margin-left: 20px; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: 500; line-height: 1.42; letter-spacing: -0.4px; color: #151515;"><a href=https://efdsearch.senate.gov/search/view/ptr/f06ca66b-6f1d-461e-990d-01e6bb206b51/>Periodic Transaction Report for 06/24/2019</a></li>
    </ul>
    <p style="margin-bottom: 10px; margin-left: 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 600; line-height: 1.42; letter-spacing: -0.4px; color: #151515;">Roberts, Pat:</p>
    <ul style="margin-left: 20px; margin-top: 0px; padding: 0px; ">
       <li style="margin-left: 20px; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: 500; line-height: 1.42; letter-spacing: -0.4px; color: #151515;"><a href=https://efdsearch.senate.gov/search/view/annual/ea3ce82e-f1e0-4f16-8498-79d02398f06c/>Annual Report for CY 2018</a></li>
    </ul>
    

    我想我可以使用fs.readFile读取文件并写入它,但我想知道是否有一个更简单的解决方案,包括Cheerio或另一个HTML解析器来获取确切的根节点,并从那里插入…想法?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Harrison Cramer    6 年前

    正如Lawrence所指出的,我应该使用一个模板引擎。

    我把<%=目标%>和<%=targetTitle%>在我的html文件内部接受文本。代码如下所示(在异步函数中):

    const readFile = (fileName) => util.promisify(fs.readFile)(fileName, 'utf8');
    const writeFile = (fileName, content) => util.promisify(fs.writeFile)(fileName, content, 'utf8');
    
    let dynamicTtile = "titleIwanttoinsert";
    let dynamicPost = "postIwantToInsert"
    
    let html = await readFile(path.resolve(__dirname, "./emailContent/blankHtml/index.html"));
    
    let tmpl = _.template(html);
    let newHtml = tmpl({ target: dynamicHtml, targetTitle: dynamicTitle });
    
    await writeFile(path.resolve(__dirname, 'emailContent', 'emails', 'sent', 'index.html'), newHtml);