在 Firebase (AngularFire) 中存储 HTML,好主意还是坏主意?

Storing HTML in Firebase (AngularFire), good idea or bad?

将 HTML 存储在 Firebase (AngularFire) 中是个好主意吗?

我有一个网站,我正在创建一个管理网站,用户可以在其中制作 HTML 元素。我希望人们保存这些元素以及元素中的顺序和内容。所以我认为将整个 HTML 存储为字符串并在它们 return 时加载它会容易得多。坏主意?

这是我的(简化):

$scope.save = function() {
    var refState = new Firebase("https://<name>.firebaseio.com/users/" + currentAuth.uid + "/state");
    var html = "<div>hello</div>";
    refState.set({
        "state": html
    }, function(error) {
        if (error) {
            console.log("not been saved")
        }
    })
}

在我的 HTML 中,我检索到想要使用 Angular 像这样显示它(是的,我现在知道如何在 Angular 中呈现 HTML 多亏了评论:)

<div class="well col-md-12">
{{sync[3].state}}
</div>
  1. 我认为将 html 存储在 firebase 中是非常糟糕的主意,只存储痛苦文本
  2. How to render html with angular templates

在 firebase 中存储字符串化 HTML 并不比将其存储在不同的数据存储中差。您需要考虑 XSS 问题,包括如果他们在 html.

中定义 <style>body{display:none}</style> 会怎样

您正在创建一个真正完整的内容创建系统吗?如果是这样,有时很难摆脱用户定义的 HTML,通常来自 CKeditor、tinymce 等。但是,如果他们构建的项目都相似,您应该考虑如何 store/restore 他们以更好的数据格式。大多数时候,有一种更好的方法来保存和恢复用户定义的内容,即直接存储 HTML.

我建议查看 Firepad

  • Firepad 是 Firebase 应用的嵌入式 "Open source collaborative code and text editing" 体验。
  • "Firepad can use either the CodeMirror editor or the Ace editor to render documents."
  • 轻松实现丰富的文本编辑器体验,无缝 stores/syncs Firebase 实例中的内容。

documentation 所述,这就是您初始化 Firepad 的方式:

<div id="firepad"></div>
<script>
  var firepadRef = new Firebase('<FIREBASE URL>');
  var codeMirror = CodeMirror(document.getElementById('firepad'), { lineWrapping: true });
  var firepad = Firepad.fromCodeMirror(firepadRef, codeMirror,
      { richTextShortcuts: true, richTextToolbar: true, defaultText: 'Hello, World!' });
</script>

在 Firebase 中存储 HTML 完全没问题。

Koding.com、Nitrous.io 等人将 Firepad 用于他们的协作代码编辑器产品。