【问题标题】:How to escape initial json data in jade?如何在jade中转义初始json数据?
【发布时间】:2016-07-05 15:21:11
【问题描述】:

我使用nodeJS/express 作为后端,使用jade 作为模板引擎。我的 Javascript 部分需要来自服务器的一些变量。一般来说,可以这样做:

script(type='text/javascript').
    var user = !{JSON.stringify(userObject)};

除了userObject<script>[some text]</script> 块的情况外,一切正常。请不要问为什么这个块出现在userObject,因为这是内部的事情,我只是想处理这种情况。

由于 Javascript 解析器比 HTML 解析器执行得早,我的嵌入因错误而被破坏:

<script>
   var user = {
      name: 'Erik',
      about: '<script>about me</script>'
   };
</script>

未捕获的 SyntaxError:无效或意外令牌

由于about me&lt;/script&gt; 行导致错误发生,因为它关闭了主要的&lt;script&gt; 标记。

所以我的问题是:处理此错误的正确方法是什么?

【问题讨论】:

  • 当我们遇到类似问题时(在这种情况下撇号也会导致中断),我们编写一个 API 调用来获取我们需要的数据并使用节点的 $http 或在脚本标签中使用 ajax 调用它。
  • 我不喜欢通过附加请求获取初始数据的想法。如果失败了怎么办?
  • 如果您在为您的网站提供服务的同一台服务器上使用完全相同的功能,那么它似乎不太可能在任何不会失败的情况下失败。
  • 会的。 &lt;script&gt;about me&lt;/script&gt; 字符串可以在任何地方

标签: javascript json node.js express pug


【解决方案1】:

如果您不想添加端点并对其进行 GET 请求以获取数据,还有两种更粗略的解决方案。请注意,这些都是杂乱无章的技巧。我仍然认为解决此问题的最佳方法是向 API 端点发出 AJAX 请求,并在 &lt;script&gt; 标记中包含所需数据。

1) 具有去除&lt;&gt; 字符并在前后应用它们的功能。

例如在 Express 端点中:

function replaceTags(aboutSection) {
    aboutSection = aboutSection.replace(/</g, '%StartBracket%');
    aboutSection = aboutSection.replace(/>/g, '%CloseBracket%');
    return aboutSection;
}

在客户端代码中:

function undoReplace(aboutSection) {
    aboutSection = aboutSection.replace(/%StartBracket%/g, '<');
    aboutSection = aboutSection.replace(/%CloseBracket%/g, '>');
    return aboutSection;
}

我正在使用带有g 标签的正则表达式来确保所有内容都被替换,而不仅仅是第一个实例。

2) 如果您不需要 about 部分,可以在将其传递给端点之前将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多