mongodb 在MongodDB JSON风格的文档中存储HTML的好策略是什么

wtzytmuj  于 2023-05-17  发布在  Go
关注(0)|答案(2)|浏览(94)

可以在MongoDB中存储HTML吗?是否存在不利因素?有更好的选择吗?
我对JSON有点陌生,但我计划将我的WordPress站点迁移到自定义的meteor/mongodb站点。
在WordPress中,我们的“帖子”本质上是产品记录,而“主要内容”是产品的描述。这些描述包含一些HTML标记,例如“strong”标记、break标记和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之类的东西。尝试在JSON风格的文档描述字段中放置HTML是个坏主意吗?是否有特殊的转义字符来执行此操作?还是应该将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

2j4z5cfb

2j4z5cfb1#

好吧,我似乎已经找到了足够的文章来总结:
在MongoDB中将html片段和文件存储为标准的utf-8编码字符串是非常好的,但有一些注意事项,在MongoDB文档“何时应该使用GridFS”中有说明(更多关于GridFS here
GridFS是用于存储和检索超过BSON文档大小限制16 MB的文件的规范。

  • ️ 注意 * GridFS不支持多文档事务

GridFS将文件分成多个部分或块,并将每个块存储为单独的文档,而不是将文件存储在单个文档中。

在MongoDB中何时使用GridFS

在MongoDB中,使用GridFS存储大于16 MB的文件。 如果需要原子地更新整个文件的内容,请不要使用GridFS*。

iklwldmw

iklwldmw2#

您可以将其存储为String的常规文本类型,但在保存到数据库之前要验证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()
        }
    })
})

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

相关问题