如何逃避玉中的初始json数据?

时间:2016-07-05 15:21:12

标签: javascript json node.js express pug

我使用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</script>行,因为它会关闭主<script>代码。

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

1 个答案:

答案 0 :(得分:0)

如果您不想添加端点并为数据执行GET请求,则还有两个原始解决方案。请注意,这些是kludgey hacks。我仍然认为解决此问题的最佳方法是向API端点发出AJAX请求,并在<script>标记内包含所需数据。

1)具有剥离<>字符的功能,并在之前和之后应用它们。

E.g。在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部分,可以在将其传递给端点之前将其删除。