Javascript / Node.js 导入 html 文件并将参数传递给 html 文件

Javascript / Node.js importing html file and passing parameters to html file

我正在制作一个 node.js 按需发送电子邮件的服务器。我正在导入一个 html 文件,我将其分配给“输出”。然后通过电子邮件发送给收件人。

app.post("/send", (req, res) => {
    console.log("sending email...");
    const token = req.body.data.token;
    const output = fs.readFileSync('emailcontents.html').toString();

这行得通。但是将“token”变量传递给 emailcontents.html 的最佳方法是什么?

如果我误解了您的要求,请告诉我。我会尽力修改答案。

根据评论中的对话,我们可以知道您想向用户发送电子邮件,而不是使用 res.render 在浏览器中为用户呈现 emailcontents.html 内容。
该电子邮件应包含 token.
并且您想将 token 插入 emailcontents.html 而不是附加。

我们假设您的 html 内容是这样的。

<h1>weclome here</h1>
<p> Please use this token to do something</p>.

您想将令牌插入{此处}。

<h1>weclome here</h1>
<p> Please use this {here} to do something</p>.

而不是{这里}。

<h1>weclome here</h1>
<p> Please use this token to do something</p>. {here}

根据上面的要求,我想出了两个方案。

第一个,使用replace方法。

在使用此方法之前,您需要像这样修改您的html。

<h1> this is emailcontents.html content</h1>
<h1>{token}</h1>

然后用replace方法替换{token}.

app.post("/send", (req, res) => {
    console.log("sending email...");
    const token = req.body.data.token;
    fs.readFile('emailcontents.html', (err, data) => {
        const output = data.toString().replace("{token}", token)
        // do other send mail job
    })

注意:只有当你的html非常非常非常简单时,你才可以使用replace

如果你的html是这样的话,处理起来比较麻烦
在这种情况下,我会建议您使用第二种解决方案。

<h1>weclome here</h1>
<h1>{token}: {token}</h1>

二、使用模板引擎

可以使用模板引擎传递参数,例如ejs.
它在任何情况下都可以工作。

<!-- emailcontents.ejs -->
<h1>this is emailcontents.html content</h1>
<h1>Please use this <%= token %> to do something</h1>
const ejs = require("ejs")
app.post("/send", (req, res) => {
    console.log("sending email...");
    const token = req.body.data.token;
    ejs.renderFile("./emailcontents.ejs", {token: token}, (error, output) => {
        // output is html string with token which you provide
        // do send mail job
    })