Nodejs问个问题 为什么node-markdown 转出来的内容会直接输出而不是变成html?
Nodejs问个问题 为什么node-markdown 转出来的内容会直接输出而不是变成html?
地址如上.
div.content-perspective
div.content
div.content-inner
h3
a(href="/blog/#{blogc._id}")=blogc.title
div.article=md(blogc.content)
jade模版. md 是传过来的
var md = require('node-markdown').Markdown;
转完之后直接显示了 不是html <>都变成了
<p><code>javascript
var this = o;
$(this).addClass('a');
</code></p>
求指导.
针对这个问题,你遇到的情况是因为node-markdown
库在转换Markdown时没有正确地进行HTML转义。通常情况下,Markdown库应该自动将Markdown文本转换为HTML。但在你的例子中,似乎Markdown文本被当作普通文本输出了,导致HTML标签被转义成它们的HTML实体。
解决方案
你可以尝试使用更现代和流行的Markdown库,例如 marked
或 markdown-it
。这些库不仅功能强大,而且支持自定义渲染器和其他高级特性。
示例代码:使用 markdown-it
首先,安装 markdown-it
:
npm install markdown-it
然后,在你的Node.js代码中使用它:
const markdownIt = require('markdown-it');
// 初始化markdown-it实例
const md = markdownIt();
// 示例Markdown文本
const markdownText = `
# 这是一个标题
这是一个段落。
\`\`\`javascript
var this = o;
$(this).addClass('a');
\`\`\`
`;
// 将Markdown文本转换为HTML
const htmlContent = md.render(markdownText);
console.log(htmlContent);
在这个例子中,markdown-it
库将Markdown文本转换为HTML,并且不会对HTML标签进行转义。这样,当你在Jade模板中使用这个转换后的HTML时,它会以正确的HTML形式呈现。
Jade模板中的使用
确保你在Jade模板中正确地插入转换后的HTML内容:
div.content-perspective
div.content
div.content-inner
h3
a(href="/blog/#{blogc._id}")=blogc.title
div.article!= md(blogc.content) // 使用 != 来避免转义
通过这种方式,Markdown内容将被正确转换为HTML,并且不会被当作纯文本处理。
自己顶一下吧~
ReferenceError: /mydata/myweb/nodejs/views/blog-list.jade:27
current_user is not defined
at eval (eval at <anonymous> (/mydata/myweb/nodejs/node_modules/jade/lib/jade.js:171:8), <anonymous>:126:6)
at /mydata/myweb/nodejs/node_modules/jade/lib/jade.js:172:35
at Object.exports.render (/mydata/myweb/nodejs/node_modules/jade/lib/jade.js:206:14)
at View.exports.renderFile [as engine] (/mydata/myweb/nodejs/node_modules/jade/lib/jade.js:233:13)
at View.render (/mydata/myweb/nodejs/node_modules/express/lib/view.js:75:8)
at Function.app.render (/mydata/myweb/nodejs/node_modules/express/lib/application.js:501:10)
at ServerResponse.res.render (/mydata/myweb/nodejs/node_modules/express/lib/response.js:755:7)
at render (/mydata/myweb/nodejs/controllers/blog.js:37:9)
at _all (/mydata/myweb/nodejs/node_modules/eventproxy/lib/eventproxy.js:230:16)
at EventProxy.trigger (/mydata/myweb/nodejs/node_modules/eventproxy/lib/eventproxy.js:133:22)
应该是模板默认对输出的变量进行了转义(出于安全考虑,很多模板默认都这样) 具体神马原因,仔细看看文档就知道了。
(俺不懂Jade模板,表示很羡慕楼主)
so嘎 果然是呢 哈哈 非常感谢
div.article=md(blogc.content) 需要换成 div.article!=md(blogc.content)
根据你的描述,node-markdown
库可能没有正确地将 Markdown 转换为 HTML。通常情况下,Markdown 库会自动处理这种转换。你可以尝试使用更现代的 Markdown 库,例如 marked
或 markdown-it
。
以下是一个使用 markdown-it
的示例:
-
首先,安装
markdown-it
:npm install markdown-it
-
修改你的 Node.js 代码以使用
markdown-it
:const markdownIt = require('markdown-it'); // 创建一个 markdown-it 实例 const md = markdownIt(); // 示例 Markdown 文本 const markdownText = ` # Hello, World! Here is some **bold** text and a code block: \`\`\`javascript var this = o; $(this).addClass('a'); \`\`\` `; // 将 Markdown 转换为 HTML const htmlContent = md.render(markdownText); console.log(htmlContent);
-
在 Jade 模板中使用生成的 HTML:
div.content-perspective div.content div.content-inner h3 a(href="/blog/#{blogc._id}")=blogc.title div.article!= md(blogc.content) // 注意这里使用 != 来避免 Jade 对内容进行转义
通过以上步骤,你应该能够正确地将 Markdown 转换为 HTML,并且在 Jade 模板中正确渲染。注意,在 Jade 模板中,你需要使用 !=
而不是 =
,这样可以防止 Jade 对内容进行转义,从而确保 HTML 正确渲染。