Доступ к локальным переменным Express.js в JavaScript на стороне клиента

Любопытно, правильно ли я это делаю, и если нет, то как вы, ребята, подошли бы к этому.

У меня есть шаблон Jade, которому нужно отображать некоторые данные, полученные из базы данных MongoDB, и мне также нужен доступ к этим данным внутри файла JavaScript на стороне клиента.

Я использую Express.js и отправляю данные в шаблон Jade следующим образом:

var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });

Затем внутри home.jadeЯ могу делать такие вещи, как:

p Hello #{data.name}!

Что выводит:

Hello stephen!

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

Я смог добиться этого, сохранив объект «данные» внутри скрытого поля ввода в шаблоне Jade, а затем извлек значение этого поля из моего JS-файла на стороне клиента.

Внутри home.jade

- local_data = JSON.stringify(data) // data coming in from Express.js
input(type='hidden', value=local_data)#myLocalDataObj

Затем в JS-файле на стороне клиента я могу получить доступ к local_data следующим образом:

Внутри myLocalFile.js

var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);

Однако эта работа по преобразованию строк/парсингу выглядит запутанной. Я знаю, что могу привязать значения моего объекта данных к объектам DOM в моем шаблоне Jade, а затем получить эти значения с помощью jQuery, но я хотел бы иметь доступ к фактическому объекту, который возвращается из Express в моем JS на стороне клиента.

Является ли мое решение оптимальным, как бы вы это сделали?

69
задан braitsch 6 June 2012 в 18:12
поделиться