【问题标题】:What is a good strategy to store HTML in MongodDB JSON-style doc在 MongodB JSON 样式的文档中存储 HTML 的好策略是什么
【发布时间】:2013-02-22 19:58:08
【问题描述】:

可以在 MongoDB 中存储 HTML 吗?有缺点吗?有更好的选择吗?

我对 JSON 有点陌生,但我正计划将我的 WordPress 网站迁移到自定义的流星/mongodb 网站。

在 WordPress 中,我们的“帖子”本质上是产品记录,“主要内容”是产品的描述。这些描述包含一些 HTML 标记,例如“强”标记、中断标记和 href 超链接。

<p>Who hasn't wished for a mini-Roomba to handle the arduous task of cleaning their iPhone screen? Now your dreams have come true! See the Takara web page for a <a href="http://www.takaratomy.co.jp/products/automee/" title="automee s" target="_blank">demo video.</a><strong>Colors: </strong> White, Red, Orange and Blue Runs on a single AA battery.<br> 1,575 yen</p>

与 XML 不同,JSON 缺少 CDATA 之类的东西。尝试将 HTML 放在我的 JSON 样式的文档描述字段中是不是一个坏主意?这样做是否有特殊的转义字符?还是应该将 HTML 产品描述存储为外部静态文件?还是有其他最佳实践?

{
'_id':'236',
'name':'Tokyo Marui M9A1 Gas Blow Back Airsoft Gun',
'description':'<p>html here?</p>',
'tags': ['toys','outdoors']
...
}

任何提示,建议,链接表示赞赏!

编辑

添加了示例产品描述文本。

EDIT2

我发现这篇 stackoverflow 文章: How to store HTML data in MongoDB?

还有一个在谷歌上 https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/HW5XB5yox20

他们似乎说应该没问题。但是没有太多讨论,所以只是寻求更多的确认。

编辑3

其他参考 https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/0m8KJ7mPWiQ

【问题讨论】:

  • 根据文件的大小和访问模式,使用静态/松散的 HTML 文件可能会更好,因为您将避免使用数据库来获取静态数据(并且许多 Web 服务器针对提供静态数据进行了优化)文件)。

标签: json mongodb meteor


【解决方案1】:

好的,我似乎找到了足够的文章来总结:

在 MongoDB 中将 html 片段和文件存储为标准 utf-8 编码字符串非常好,但有一些注意事项: http://docs.mongodb.org/manual/faq/developers/#when-should-i-use-gridfs

【讨论】:

  • 新问题:怎么做? stackoverflow.com/questions/15275599/…
  • 您也可以考虑使用 MongoDB 的 GridFS 来存储它们(或使用第二个集合)。您可能并不总是希望从文档中提取所有 HTML,因此您可能希望拆分 HTML。只是需要考虑的事情。这取决于您的访问模式。
【解决方案2】:

您可以将其存储为字符串的常规文本类型,但在保存到数据库之前验证 HTML。这是使用express-validatorsanitize-html 的示例

body('description').not().isEmpty().trim().isLength({ min: 3 }).customSanitizer(value => {
    return sanitizeHtml(value, {
        exclusiveFilter: (frame) => {
            return frame.tag === 'script';
        },
        textFilter: (value) => {
            return value.replace(/\\n|\s\s/g, "").trim()
        }
    })
})

这里我从用户的描述中获取 HTML req.body.description 正如您所看到的,express-validator 用于验证特定规则和 sanitize-html 以控制我需要的默认选项以及我正在剥离脚本标签以及换行符和空格。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多