Как добавить тег stringified script в express + jade/pug

У меня есть express с использованием мопса в качестве представления. Мой индекс.мопс имеет следующее:

script(type='text/javascript').
      window.__DATA__ = !{payload}

где полезная нагрузка-объект json. Он был stringified в функции render express:

res.render('index', {
    payload : JSON.stringify({
       "anExample": "<script></script>"
    })
})

Когда мой объект Json имеет</script>, он завершает мою window.__DATA =функцию рано из-за окончания тега сценария. Как предотвратить взрыв страницы? Это ограничение мопса или Express или браузера?

2 ответа

  1. Вам придется «разбить» строку, содержащую теги скрипта.

    Что-то вроде этого должно работать:

    "anExample": "<script></scr" + "ipt>"
    

    Таким образом, </scr" + "ipt>не будет интерпретироваться как закрывающий тег скрипта.

  2. После запроса решения следует использовать библиотеку stringify вместо использования предоставленной JSON.stringifyфункции.

    В частности, я использовал модуль npmjs-stringify, который изменяет <символы в Юникод в дополнение к строкованию json. Следовательно, что затем может быть вставлен в A шаблонный двигатель, как мопс. Мопс может затем unescape его с.!{my_stringified_json} Так как он unescapes unicode обратно к его оригиналу, json в конечном итоге 'anExample: '<script></script'>вместо того, чтобы это эквивалент unicode.