2016-03-03 2 views
0

Пытается передать аргументы с сервера на клиент в Node.js с помощью Express.Передача аргументов с сервера на клиентскую сторону Node.js express

Я использую следующую команду на стороне сервера:

for (var i = 0; i < events.length; i++) 
{ 
    existingEvents.push(events[i]); 
} 
res.render('index', { locals: {existingEvents: existingEvents}}); 

И следующий код на стороне клиента (нефрит), внутри секции сценария

var events = ""; 
     for (var i = 0;i < existingEvents.length;i++) 
     { 
      if (i == 0) 
      { 
       events = "events: [{title: '" + existingEvents[i].summary +"', start: '" + existingEvents[i].start.dateTime + "',constraint: 'businessHours'}"; 
      } 
      else 
      { 
       events += ", { title: 'aaaaaaaaa', start: '2016-03-03T13:00:00',constraint: 'businessHours'}"; 
      } 
     }events += "]"; 

Когда я отладки на хроме Я получаю следующую ошибку в отношении existingEvents:

«Неоткрытый ReferenceError: existingEvents не определен».

Я взглянул на это сообщение: Accessing Express.js local variables in client side JavaScript и попробовал различные способы его достижения. (например, попробовал # {existingEvents}).

Но до сих пор ничего не было сделано. как бы вы, ребята, это сделали? Спасибо вы очень много для вас помощь :)

+0

Вы, кажется, пытаетесь создать JS-код. Не делай этого. – Tomalak

+0

Эй, вы можете немного разобраться? что вы имеете в виду, пытаясь создать JS-код? – UserED

+0

Что это за строка, которую вы объединяете во втором примере кода? – Tomalak

ответ

2

Попробуйте это:

for (var i = 0; i < events.length; i++) 
{ 
    existingEvents.push(events[i]); 
} 
res.render('index', { existingEvents: existingEvents }); 

и нефрит:

script(type="text/javascript"). 

    var existingEvents = !{JSON.stringify(existingEvents)}; 

    var events = ""; 
    for (var i = 0; i < existingEvents.length; i++) 
    { 
     if (i == 0) 
     { 
      events = "events: [{title: '" + existingEvents[i].summary +"', start: '" + existingEvents[i].start.dateTime + "',constraint: 'businessHours'}"; 
     } 
     else 
     { 
      events += ", { title: 'aaaaaaaaa', start: '2016-03-03T13:00:00',constraint: 'businessHours'}"; 
     } 
    } 
    events += "]"; 
+0

Спасибо!что сделал трюк :), так что в основном, если я объявлю его «локальным» на сервере, я не смогу использовать его позже? – UserED

1

Если во время рендеринга страницы, вы хотите передать некоторые переменные на клиентский Javascript, тогда вы можете просто создать тег <script> на странице и определить переменные Javascript. Это обычно делается в рамках шаблона рендеринга для страницы, так что полученный веб-страница содержит что-то вроде этого:

<script> 
var existingEvents = {...}; // some Javascript data in here 
</script> 

Как именно вы получите, вынесший тега сценария целиком и полностью зависит от того, какой шаблон страницы движок рендеринга вы используются.

Затем, код Javascript на веб-странице может ссылаться на переменную existingEvents на странице.


Если после того, как уже была загружена страница и работает в браузере страницу Javascript хочет динамически загрузить некоторые данные с сервера, то он может выдать вызов Ajax к серверу и запрашивать данные. Сервер выполнит маршрут для этого вызова Ajax и вернет данные в форме JSON. Затем клиент проанализирует этот результат JSON и будет использовать данные, которые ему нужны.

2

Поместите следующий в шаблоне нефрита перед вызовом код:

script(type="text/javascript"). 
    existingEvents = !{JSON.stringify(existingEvents)}; 

Это создаст existingEvents глобальную переменную в JavaScript вы можете использовать последний.

+0

Спасибо! что сделал трюк :) – UserED

+0

Если это так, пожалуйста, отметьте ответ как правильный. – yeiniel

+0

Спасибо за это! –

Смежные вопросы