Nodejs问个问题 为什么node-markdown 转出来的内容会直接输出而不是变成html?

Nodejs问个问题 为什么node-markdown 转出来的内容会直接输出而不是变成html?

http://198.100.114.49:8080/

地址如上.

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 <>都变成了

&lt;p&gt;&lt;code&gt;javascript
var this = o;
$(this).addClass('a');
&lt;/code&gt;&lt;/p&gt;

求指导.


6 回复

针对这个问题,你遇到的情况是因为node-markdown库在转换Markdown时没有正确地进行HTML转义。通常情况下,Markdown库应该自动将Markdown文本转换为HTML。但在你的例子中,似乎Markdown文本被当作普通文本输出了,导致HTML标签被转义成它们的HTML实体。

解决方案

你可以尝试使用更现代和流行的Markdown库,例如 markedmarkdown-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 库,例如 markedmarkdown-it

以下是一个使用 markdown-it 的示例:

  1. 首先,安装 markdown-it

    npm install markdown-it
    
  2. 修改你的 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);
    
  3. 在 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 正确渲染。

回到顶部