Nodejs 请问jade如何将字符串转换为标签输出
Nodejs 请问jade如何将字符串转换为标签输出
比如一篇文章以字符串形式存在数据库中 node读出来用jade渲染时候 怎样才能不直接输出字符串 而是输出标签呢?
比如
{
content:"<h1>你好</h1><p>Hello</p>"
}
#cont =content
这样显示不出来
当然可以!在 Node.js 中使用 Jade(现在称为 Pug)时,如果你有一个包含 HTML 标签的字符串,并希望将其作为标签而不是纯文本输出,你需要使用 !{variable}
语法来转义变量内容。这样,Jade 就不会对内容进行自动转义,而是将其作为 HTML 进行解析。
下面是一个具体的示例:
示例代码
假设你有如下数据结构:
const article = {
content: "<h1>你好</h1><p>Hello</p>"
};
你可以创建一个简单的 Jade/Pug 模板文件 template.pug
如下:
doctype html
html
head
title 文章内容
body
#cont!= content
注意这里我们使用了 !=
而不是 =
。!=
会告诉 Jade 不要转义内容,而是将其作为 HTML 解析。
解释
!=
:这个语法用于输出未转义的内容。Jade 会将content
变量中的 HTML 字符串解析为实际的 HTML 标签。= variable
:如果使用=
,Jade 会自动转义变量内容,使其成为纯文本输出,而不是 HTML 标签。
渲染模板
在你的 Node.js 应用中,你可以这样渲染模板:
const jade = require('pug');
const fs = require('fs');
// 读取模板文件
const template = fs.readFileSync('./template.pug', 'utf8');
// 渲染模板
const html = jade.compile(template)({ content: article.content });
console.log(html);
输出结果
当你运行这段代码时,你会得到以下 HTML 结果:
<!DOCTYPE html>
<html>
<head>
<title>文章内容</title>
</body>
<div id="cont">
<h1>你好</h1>
<p>Hello</p>
</div>
</body>
</html>
这样,你就可以正确地将包含 HTML 标签的字符串作为标签输出到页面上了。
通过http://cnodejs.org/topic/5055dcd598ee09042005b228 找到解决办法了 直接 !=content 就可以了…
在Jade(现称为Pug)模板引擎中,默认情况下会自动转义HTML内容以防止XSS攻击。如果你想输出一个包含HTML标签的字符串,可以使用!{variable}
语法来禁用自动转义。
以下是具体的示例代码:
// 假设你在Node.js后端有如下数据
const data = {
content: "<h1>你好</h1><p>Hello</p>"
};
// 在Jade/Pug模板中
#cont !=content
在这个例子中:
!=content
表示不进行转义直接输出变量content
的值。- 如果使用
#{content}
,则会将HTML标签当作普通文本输出,不会解析为HTML标签。
示例代码
假设你的Node.js服务器代码如下:
const express = require('express');
const app = express();
app.set('view engine', 'pug');
app.get('/', (req, res) => {
const data = {
content: "<h1>你好</h1><p>Hello</p>"
};
res.render('index', data);
});
app.listen(3000, () => console.log('Server running on port 3000'));
然后你的 views/index.pug
文件内容如下:
html
body
div#cont !=content
这样,当访问该路由时,页面将正确显示 <h1>
和 <p>
标签,而不是将它们当作纯文本显示。
注意事项
- 使用
!=
输出未转义的HTML内容可能会带来安全风险,确保内容来自可信的数据源。 - 如果内容是用户提交的,建议先对内容进行安全处理,例如使用白名单过滤或类似的安全措施。