2016-07-05 7 views
0

私はバックエンドとしてnodeJS/expressを使用し、テンプレートエンジンとしてjadeを使用します。私のJavascriptの一部では、サーバーからいくつかの変数が必要でした。一般的に、これは次のように行うことができます。jadeの初期jsonデータをエスケープする方法は?

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

すべてがuserObject<script>[some text]</script>ブロックを有している場合を除いて正常に動作します。このブロックがuserObjectに表示される理由を聞かないでください。これは内部的なものであり、このケースを処理したいからです。

Javascriptのパーサが私の埋め込みがエラーで壊れますHTMLパーサよりも早く実行されるという事実のため、次は、メイン<script>を閉じたため、エラーが原因about me</script>ラインに起こる

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

Uncaught SyntaxError: Invalid or unexpected token

タグ。

私の質問です:このエラーを処理する適切な方法は何ですか?

+0

同様の問題(アポストロフィもこの場合ブレークを引き起こす)がある場合、必要なデータを取得するためのAPIコールを作成し、ノードの$ httpまたはスクリプトタグのajaxを使用して呼び出します。 –

+0

追加のリクエストで初期データを取得するのは嫌です。それが失敗すればどうなりますか? – Erik

+0

あなたがあなたのウェブサイトを提供しているサーバと全く同じ機能を使用している場合、すでに失敗していない場合は失敗することはまずありません。 –

答えて

0

エンドポイントを追加し、そのデータに対してGET要求を行いたくない場合は、さらに2つの解決策があります。これらは、クルージーのハックであることに注意してください。私はまだこれを解決する最善の方法は、<script>タグ内の必要なデータを持つAPIエンドポイントへのAJAX要求であると考えています。

1)<文字と>文字を取り除いて前後に適用する関数を用意してください。

など。クライアント側のコードで

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

:Expressエンドポイントで

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

私は必ずすべてだけではなく、最初のインスタンスを作るためにgタグで正規表現を使用しています、交換されます。

2)aboutセクションが必要ない場合は、それを削除してエンドポイントに渡すことができます。