Nodejs Markdown问题 内容更新两次转换
Nodejs Markdown问题 内容更新两次转换
Markdown问题 自己做的博客,后端将新发表的博客文章转换为Markdown格式存入数据库。但是在做文章的修改/内容更新时,同样存入数据库后会出现两次转换(前端输出了html标签),这个要怎么解决最好? (不想在取数据的时候转换,也不可能在更新数据时不转换)
2 回复
Node.js Markdown 问题:内容更新两次转换
问题描述
在使用Node.js处理博客文章时,我们通常会将用户输入的文章内容转换为Markdown格式存储到数据库中。然而,在用户修改文章并重新保存时,可能会出现Markdown内容被转换两次的情况,导致前端显示的是HTML标签而非预期的渲染结果。
解决方案
为了确保Markdown内容只被转换一次,可以在保存到数据库之前检查内容是否已经是HTML格式。如果是HTML格式,则不再进行Markdown转换。可以通过一个简单的函数来实现这一逻辑。
示例代码
const marked = require('marked'); // 用于Markdown转HTML
const markdownContent = '这是**Markdown**格式的内容';
const htmlContent = '<p>这是<strong>HTML</strong>格式的内容</p>';
function isHtml(content) {
const htmlTagRegex = /<("[^"]*"|'[^']*'|[^'">])*>/;
return htmlTagRegex.test(content);
}
function convertToMarkdownOrHtml(content) {
if (!isHtml(content)) {
return marked(content); // 将Markdown转换为HTML
}
return content;
}
// 测试函数
console.log(convertToMarkdownOrHtml(markdownContent)); // 输出HTML格式的内容
console.log(convertToMarkdownOrHtml(htmlContent)); // 输出原始HTML内容
解释
- 引入marked库:
marked
是一个常用的Markdown转HTML的库。 - 定义isHtml函数:该函数通过正则表达式检测字符串中是否存在HTML标签。
- 定义convertToMarkdownOrHtml函数:该函数接收内容作为参数,如果内容不是HTML格式,则调用
marked
将其转换为HTML格式;否则直接返回原始内容。
通过这种方式,可以避免在更新文章时重复转换Markdown内容,从而确保前端显示正确的结果。
为了处理在文章修改或内容更新时出现的两次Markdown转换问题,我们需要确保每次更新操作只进行一次转换,并且存储的是转换后的HTML内容。以下是一种可能的解决方案:
- 在第一次创建文章时,将Markdown文本转换成HTML并保存到数据库。
- 当文章需要更新时,先从数据库中读取当前已存在的HTML内容,而不是Markdown内容。
- 更新HTML内容后,再将其保存回数据库。
这样可以确保每次更新只执行一次Markdown到HTML的转换,避免重复转换导致的问题。
示例代码如下:
const markdown = require('markdown-it')();
function createArticle(markdownContent) {
// 将Markdown内容转换为HTML
const htmlContent = markdown.render(markdownContent);
// 存储HTML内容到数据库
saveToDatabase(htmlContent);
}
function updateArticle(id, markdownContent) {
// 从数据库中获取现有的HTML内容
let existingHtmlContent = getFromDatabase(id);
// 将新的Markdown内容转换为HTML
const newHtmlContent = markdown.render(markdownContent);
// 合并更新内容(这里只是简单示例,实际应用可能需要更复杂的逻辑)
const updatedHtmlContent = mergeHtmlContents(existingHtmlContent, newHtmlContent);
// 将更新后的HTML内容保存回数据库
saveToDatabase(updatedHtmlContent);
}
以上代码展示了如何处理Markdown到HTML的转换问题。通过这种方式,可以避免在更新文章内容时进行不必要的转换,从而确保前端展示正确的内容。