вывод данных на страницу с сервера node.js без перезагрузки страницы

Можно ли сделать так чтобы при нажатии кнопки в шаблонизаторе ejs выполнялась функция на сервере node.js и вычисления выполненные данной функцией выводились на странице без ее перезагрузки


Ответы (2 шт):

Автор решения: Pavel Grishaev

Если вы имеете в виду шаблон целой страницы, то нельзя. Процесс отображения страницы происходит следующим образом:

  1. Шаблонизатор создаёт HTML, который отправляется в браузер. На этом работа шаблонизатора завершена. Его результат - строка HTML. Запрос страницы по URL тоже можно считать завершённым (обычно запрос не висит долго, а завершается после выдачи HTML).
  2. Браузер из этого HTML создаёт элементы в документе. Браузер не может никак сказать шаблонизатору что-то доделать или переделать, потому что шаблонизатор уже отработал на прошлом шаге.

Если нужно что-то обновить на странице, то делается AJAX-запрос, и его ответ выводится на страницу. При обработке данного запроса на сервере вы можете использовать шаблонизатор, если ваша цель - получить фрагмент HTML, чтобы потом его вставить в страницу в определённое место.

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

→ Ссылка
Автор решения: Victor Gorban

Нажатие кнопки в шаблонизаторе - это нажатие кнопки на странице в браузере?

Через ejs вы можете привязать обработчик, а в обработчике отправлять ajax и затем обновлять страницу: <button onclick="myFunction()"></button>

<script> 
  async myFunction(){
    let res = await fetch('/urlOnYourServer') // на сервере обработайте этот запрос и верните ответ
    $('#someInput').val(res.data);
}
</script>

Сам ejs - это просто рендеринг страницы, грубо говоря подставновка значений переменных в ваш текст страницы. Встроенного ajax в нем нет, это задача браузера.

→ Ссылка