сохранить объект nodejs внутри тега скрипта мопса

Sep 13 2020

У меня есть несколько объектов, которые мне нужно отобразить / сохранить в моем файле мопса для последующего использования в JS-скриптах на стороне клиента.

Чтобы хранить объекты внутри тега скрипта, я бы использовал метод, описанный здесь и здесь :

Переменная NodeJS

const object = {
    "someKey": {
        "message":"this works"
    }
}
res.render("index", {object});

мопс (где-нибудь в файле - обратите внимание на. после тега скрипта)

обратите внимание, я использую двойные кавычки - вы можете использовать одинарные кавычки, но я упомяну об этом позже

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

затем где-нибудь в ваших сценариях javascript

alert(object.someKey.message)

Узнайте больше об интерполяции мопсов здесь .

Проблема:

Для всех моих применений приведенный выше пример работает нормально. Проблема возникает, когда у меня есть объект с одной кавычкой внутри:

const object = {
    "someKey": {
        "message":"this doesn't work"
    }
}

Javascript не нравится наличие одинарной кавычки, поскольку он видит одинарную кавычку как начало / конец ключа / значения объекта:

получить это с консоли Chrome

Причина:

Удаление этой одинарной кавычки решает проблему. При достижении этой точки JSON.parse()функция генерирует исключение и прекращает загрузку любого без исключения JS, таким образом, никакие другие функции не работают. Чтобы решить эту проблему, поместите это в самый конец страницы, но это не решит проблему.

Вопрос:

Как передать объект из NodeJS в мопс (как показано выше) в одинарных кавычках?


Обновлять

MCVE выдачи с использованием стандартной NodeJS выражает котельную плиту

https://github.com/cybex-dev/pug-single-quote-isse

Инструкции по установке:

git clone https://github.com/cybex-dev/pug-single-quote-isse
npm install 
npm start

Вы должны увидеть ожидаемый вывод консоли, я просто вижу:

и "строка ошибки"

Ответы

1 kmgt Sep 13 2020 at 16:06

Я не могу воспроизвести ваш рабочий пример с помощью:

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

Но для меня работает следующее:

script.
    var object = !{JSON.stringify(object)};
    console.log(object.someKey.message);

Без двойных кавычек: var object = !{JSON.stringify(object)}