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
})
我正在制作一个 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
})