Node.js - где найти входящий параметр в HTML/ документе
В моем коде Node.js есть следующая функция, которая отображает HTML-страницу и передает ей объект javascript с именем htmlParamObj
exports.getPage = function (req, res, next) {
var htmlParamObj= {
propertyOne: 'yada',
propertyTwo: 'yada yada'
};
res.render('myPage.html',htmlParamObj);
};
Я могу получить доступ к входящему параметру (htmlParamObj
) с EJS вроде так: <% propertyOne %>
, но я не знаю, как получить доступ htmlParamObj
через сам документ. Я верю, что htmlParamOb 'будет прикреплен к документу html - но в каком поле документа я могу его найти? Это в голове, теле, дочерних узлах? Куда?
2 ответа
Переданный объект используется только при рендеринге HTML и не будет передан в браузер.
Если вам нужны эти данные внутри страницы, вы должны поместить их туда.
Решение, которое я использовал, когда мне нужно передать сложные данные в сценарий на стороне клиента, состоит в том, чтобы поместить тег сценария в верхнюю часть моего HTML-файла EJS и заполнить его своими данными. Например, я мог бы добавить следующее в мой шаблон:
<script>
window.MY_DATA = <%= JSON.stringify(myData) %>
</script>
Обратите внимание, что, поскольку JSON является подмножеством JavaScript, я могу использовать JSON.stringify
сериализовать мои данные в форму, подходящую для размещения внутри тега скрипта, и назначить их любой переменной, которую я хочу.
Ограничением здесь является то, что вы не можете отправлять данные, которые не могут быть сериализованы с JSON.stringify
, Не тяжелое бремя, но может сбить вас с толку, если вы хотите отправить функцию или другой объект.
Решение, которое я нашел, состоит в том, чтобы определить глобальный атрибут в моем HTML следующим образом:
<a name="team" value="<%=team._id%>"></a>
тогда я могу получить к нему доступ любым скриптом, например:
<script>
var team = document.getElementsByName('team');
</script>
Это вернет правильный объект. Однако я не думаю, что это лучший ответ, особенно учитывая, что любая глобально определяемая переменная обычно является плохой идеей. Я надеюсь, что другой ответ дается на этот вопрос.