Доступ к функциям на стороне сервера с помощью Express.js и EJS

Я запускаю тестовое приложение в Express.js, используя EJS в качестве механизма создания шаблонов. Я хотел бы получить доступ к функциям, хранящимся в файле .js, для работы на стороне сервера, а не на стороне клиента. Например, если у меня есть:

<%= console.log("I'm in the server console"); %>

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

<script type="text/javascript"> console.log("I'm in the client-side console"); </script>

Теперь, если у меня есть функция для вывода того же самого для клиентской стороны, я могу включить ее следующим образом:

<script type="text/javascript" src="/javascripts/clientSideCode.js"> clientSideOutput(); </script>

Но как мне включить файл и его функции таким образом, чтобы EJS мог выполнять код на стороне сервера? Похоже, что папка public в экспрессе предназначена только для кода на стороне клиента.


person Jason Burgett    schedule 02.02.2013    source источник
comment
Посмотрите на вспомогательные функции.   -  person chovy    schedule 03.02.2013


Ответы (2)


Вы можете создавать вспомогательные функции, к которым ваши шаблоны могут получить доступ через app.locals:

person hunterloftis    schedule 02.02.2013
comment
Я не уверен, что это именно то, что я ищу. Это просто раскрывает объект или целую функцию. Давайте, у меня есть функция с именем createFile, которая будет создавать файл на сервере после того, как кто-то щелкнет ссылку, как мне это сделать? - person Jason Burgett; 03.02.2013
comment
Похоже, вы ищете маршрут. Чтобы создать файл на сервере, когда кто-то щелкает ссылку, вы захотите использовать ajax (или POST для отображаемой страницы) и маршрут на сервере, который может создавать файлы. - person hunterloftis; 03.02.2013

Вы можете использовать node.js и Socket .IO для передачи событий между клиентом и сервером в реальном времени. Например, клиент сделает что-то вроде:

<script>window onload = function() {

socket.emit('request_customer_list', { state: "tx" });

socket.on('receive_customer_list', function(data) {
$.each(data.customer_list, function(key, value) {

  socket.set(key, value); // store the customer data and then print it later
});

});}

На вашем сервере у вас может быть процедура для загрузки списка клиентов и отправки его в аналогичном формате:

socket.on('connection')
  socket.on('request_customer_list', function(data){
   state = data.state;
   var customer_list;
   // pretend i loaded a list of customers from whatever source right here
   socket.emit('receive_customer_list', {customer_list: customer_list});
)} )};
person hawgpadre    schedule 03.07.2013