Как шаблон ejs загружается в браузере? Как интерфейс взаимодействует с бэкэндом?
Работа над внешним и внутренним интерфейсом с использованием NodeJ для серверной части и шаблона ejs для внешнего интерфейса. Наткнулся на функцию при использовании скриптов ejs для отображения данных, отправленных с сервера во время загрузки страницы.
Используемый <%console.log()%>
через ejs думал, что этот журнал будет виден в журналах проверки элементов, однако получил сообщение через серверный терминал. Как эта информация отправляется на сервер без отправки формы или вызова API?
Сервер app.js:
/*jshint multistr: true, node: true, esversion: 6, undef: true, unused: true, varstmt: true*/
"use strict";
// NPM Modules
const express = require('express'),
path = require('path');
const app = express();
// Setup views directory, file type and public filder.
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.render('index', {message:'Welcome'});
});
const port = process.env.PORT || 3000;
console.log('server listening at http://127.0.0.1 over port: ', port);
app.listen(port);
Шаблон EJS index.ejs:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<!-- All these CSS files are in plublic directory, as we had made all the content of public directory available for anyone from app.js -->
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="/css/app.css" />
<link rel="shortcut icon" href="logo.jpg" />
<title>Sign-Up/Login Form</title>
</head>
<body>
<%console.log(message)%>
<%=message%>
<%console.log("anything")%>
</body>
</html>
Как можно все <%console.log()%>
отправляются через серверный терминал и <%=message%>
отображается в браузере. Четное <%console.log("anything")%>
отображается через серверный терминал, хотя это не имеет ничего общего с сервером. Как скрипты ejs взаимодействуют с сервером, а не с браузером?
Кто-нибудь еще пробовал это раньше или наблюдал за этим.
1 ответ
Ваш вопрос о том, как работают шаблоны ejs. Это ответ на этот вопрос. Я думаю, что у вас также может быть что-то нехорошее в вашей экспресс-настройке, вызывающее проблемы.
EJS - это система рендеринга на стороне сервера. Его работа выполняется до того, как HTML отправляется клиенту, поэтому он не имеет ничего общего с браузером.
Скриплеты внутри <% %>
запустить на сервере, чтобы вставить содержимое в шаблон перед отправкой клиенту.
Если вы хотите распечатать что-то на консоли браузера, не помещайте это в скриптлет, просто поместите это в <script>
тег, как это:
<script>
console.log("foo");
</script>
Если вы хотите, чтобы консоль браузера печатала что-то, сгенерированное сервером, вы можете использовать ejs, чтобы поместить значение сообщения в то, что оно генерирует:
<script>
console.log("<%=message%>");
</script>
Сервер поместит значение сообщения в оператор console.log(), который доставляется в браузер.
Этот пример выводит "Wellcomes" на консоль браузера:
сервер:
const bodyParser = require('body-parser'),
express = require('express'),
path = require('path');
const app = express();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.render('index', { message: 'Wellcomes' });
});
const port = process.env.PORT || 3000;
const listener = app.listen(port, function() {
console.log('platform listening on', listener.address().port);
});
index.ejs:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>Sign-Up/Login Form</title>
</head>
<body>
<script>
console.log("<%=message %>");
</script>
</body>
</html>
Если вы показываете источник страницы в вашем браузере, вы должны увидеть:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>Sign-Up/Login Form</title>
</head>
<body>
<script>
console.log("Wellcomes");
</script>
</body>
</html>