Подключение js файла к html: Внешние скрипты, порядок исполнения

Содержание

Подключение и выполнение JavaScript на странице

Несколько примеров как подключить JS скрипты к web страницам и некоторые тонкости.

1

JS в отдельных файлах

<script src="/script.js" type="text/javascript"></script>

Также можно указать кодировку файла атрибутом charset:

<script src="/script.js" type="text/javascript" charset="utf-8"></script>

Атрибут async загрузит скрипт асинхронно т.е. не будет блокировать дальнейшую загрузку страницы.

<script src="/script.js" type="text/javascript" async></script>

Атрибут defer откладывает выполнение скрипта до тех пор, пока вся страница не будет полностью загружена.

<script src="/script.js" type="text/javascript" defer></script>

Атрибут crossorigin используется для внешних ресурсов ускоряя загрузку.


Могут быть значения:




anonymous При загрузке не передаются cookie, сертификат X.509, логин/пароль для аутентификации по HTTP
use-credentials Выполняется кросс-доменный запрос Origin
<script src="/script.js" type="text/javascript" crossorigin="anonymous"></script>
<script src="/script.js" type="text/javascript" crossorigin="use-credentials"></script>

2

JS в коде страницы

<script type="text/javascript">
...
</script>

<script>
...
</script>

3

Мета-тег Content-Script-Type

Указывает используемый язык в тегах <script>...​</script>. По умолчанию используются значение text/javascript.

<meta http-equiv="content-script-type" content="text/javascript">

4

Noscript

Браузер покажет содержание тега <noscript> если JS не поддерживается или отключен.

<noscript>
...
</noscript>

5

Экранирование JS кода

В старых браузерах где был отключён JS содержание тега выводилось на странице, поэтому JS код экранировали:

<script type="text/javascript">
<!--
...
//-->
</script>

Как подключить файл javascript к html

Предположим, что у вас есть html-документ и javascript код, который должен в нем выполняться.

Код javacript может находиться как внутри html-документа, так и в отдельном файле формата *.js.

Проблема, которая очень часто появляется у начинающих пользователей:

Как подключить javacript-код или файл к html документу?

В этой небольшой заметке мы рассмотрим, как это можно сделать.

Пусть содержимое файла html будет следующее:

Теперь код, который необходимо подключить:

Т.е. этот скрипт просто должен вывести всплывающее окно с сообщением, что «Javacript подключен» при открытии файла html-документа.

Итак, рассматриваем два варианта подключения скрипта.

Вариант 1. Подключение внутри html-файла.

Делается это с помощью конструкции:

Вставим этот код можно внутри тэга , либо внутри тега .

В итоге, содержимое html файла может буть следующим:

Проверяем, что все работает:

Отлично. Окно с сообщением появилось.

Вариант 2. Подключение внешнего файла скрипта с кодом.

Если javascript-код находится во внешнем файле, то способ его подключение будет несколько другим.

Пусть такой файл называется script.js. О том, как создать javascript файл я писал здесь.

В итоге, имеем два файла index.html и script.js, которые находятся в одной папке.

Как теперь подключить скрипт к html файлу?

В этом случае нужно воспользоваться тэгом

Об адресах и как их правильно выставлять информация здесь.

Так как файл скрипта script.js находится в той же папке, что и файл index.html, то html-код может быть следующим:

Как правило, скрипты подключаются в области документа.

Если все сделано правильно, то вы точно также сможете увидеть всплывающее окно с надписью, что «javascript подключен».

Это два основных способа, как вы можете подключить код javascript к html документу. Пользуйтесь этим на практике.

Давайте разберемся, как можно подключить какой-нибудь Javascript-код, либо Javascript-файл к html-документу.

Предположим, что у нас имеется 2 файла:

html файл — это простая веб-страница, а в файле js — у нас содержится javascript код.

Предположим, что содержимое файла index.html у нас следующее:

Как в этот документ можно добавить какой-либо javascript код?

Есть несколько методов, как это можно сделать.

1 метод. Добавление Javascript-кода непосредственно в файл html.

Для этого метода нужно создать элемент script в каком-либо html-документа.

2 метод. С помощью подключения стороннего файла script.js.

Это 2 основных метода, как можно подключить Javascript к html-документу. Используйте и применяйте это на практике.

Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:

Или зарегистрируйтесь через социальные сети:

Верстка, HTML и CSS.

Веб-сервер. Backend разработка.

Техническая сторона веб-аналитики сайтов.

SEO и продвижение сайтов.

Здравствуйте. Меня зовут Дмитрий Ченгаев.

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

[+] HTML
[+] CSS
[+] PHP
[+] Верстка сайтов
[+] Javascript
[+] других инструментах, которые помогают решать задачи веб-разработки проще и быстрее.

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

Если у вас возникают какие-то вопросы или непонятные моменты, пишите в «личку» или в комментариях на этом сайте. Постараюсь помочь.

JavaScript — это язык программирования, используемый в веб-разработке. Он используется для создания интерактивных веб-страниц и веб-приложений. Современные браузеры поддерживают JavaScript при помощи тега HTML script и не требуют установки дополнительных плагинов.

JavaScript необходимо загружать и запускать одновременно с разметкой. Это можно сделать как внутри HTML-документа , так и в отдельном файле, который браузер загрузит одновременно с HTML .

В этой статье мы расскажем о том, как подключить JavaScript в создаваемых веб-страницах в виде скрипта в HTML-документ и отдельного файла.

Добавление JavaScript в HTML-документ

Можно добавить JavaScript-код в HTML-документ при помощи специального тега

Куда вставлять Javasсript

Чтобы код Javascript сработал в браузере пользователя, его необходимо вставить между тегами <script> и </script>.


<html>
<head>
	<title>Пример JavaScript</title>
</head>
<body>
<script>
	document.getElementById("demo").innerHTML = "Первый сценарий на JavaScript";
</script>

<noscript>
	Ваш браузер не поддерживает JavaScript или поддержка отключена в настройках.
</noscript>

<div></div>
</body>
</html>

В данном примере, как только HTML страница будет загружена, браузер запустит команду document.getElementById(«demo»).innerHTML = «Первый сценарий на JavaScript», которая ищет элемент с идентификатором «demo» и, найдя его, помещает в него строку «Первый сценарий на JavaScript».

В действительности полная запись тега <script> имеет следующий вид: <script type=»text/javascript»>. В атрибуте type указывается используемый язык скриптов. Однако в настоящее время существует не так уж много таких языков, и в HTML язык Javascript установлен как язык скриптов по умолчанию. Поэтому атрибут type использовать не нужно.

Также, обратите внимание на теги <noscript> и </noscript>. Этот тег срабатывает, когда по той или иной причине, например, выполнение сценариев отключено в настройках браузера, невозможно выполнить сценарий Javasсript.

Функции и события JavaScript

Функция JavaScript — это блок кода, который выполняется по «вызову».

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

Подробнее о функциях и событиях вы узнаете позже в соответствующих главах.

JavaScript в теге <head> и <body>

В HTML документ можно вставлять любое число скриптов.

На HTML странице скрипты можно размещать внутри секции <body> или <head>, либо в обоих сразу.

В следующем примере функция JavaScript размещена в секции <head>. Эта функция вызывается при нажатии пользователем на кнопку:


<!DOCTYPE html>
<html>

<head>
<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "Параграф изменен.";
}
</script>
</head>

<body>

<h2>Веб-страница</h2>
<p>Параграф</p>
<button type="button">Изменить</button>

</body>
</html> 

В следующем примере функция JavaScript размещена в секции <body>:


<!DOCTYPE html>
<html>

<body>

<h2>Веб-страница</h2>
<p>Параграф</p>
<button type="button">Изменить</button>

<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "Параграф изменен.";
}
</script>
</body>
</html> 

Размещение скриптов в нижней части элемента <body> увеличивает скорость отображения HTML документа, так как компиляция скриптов замедляет рендеринг веб-страницы.

Внешний JavaScript

Скрипты также можно размещать во внешних файлах:

Внешний файл: myScript.js


function myFunction() {
   document.getElementById("demo").innerHTML = "Параграф изменен.";
} 

Внешние скрипты оправданы тогда, когда нужно один и тот же сценарий использовать в нескольких HTML документах.

Обычно у файлов JavaScript расширение .js.

Чтобы использовать внешний скрипт, нужно поместить имя файла Javascript в атрибут src тега <script>:


<script src="//msiter.ru/myScript.js"></script>

Подключать внешние скрипты можно внутри тега <head> или <body>.

Скрипт будет вести себя так же, как если бы он был вставлен непосредственно внутри тега <script>.

Внимание! Внешние скрипты не могут содержать теги <script>.

Преимущества внешних JavaScript

У размещения скриптов во внешних файлах есть ряд преимуществ:

  • Разделяется HTML и Javascript код
  • Становится проще читать и обслуживать HTML и JavaScript
  • Благодаря кешированию файлов JavaScript увеличивается скорость загрузки веб-страницы

Чтобы добавить несколько файлов скриптов на HTML страницу, достаточно вставить нужное число тегов <script>:


<script src="//msiter.ru/myScript1.js"></script>
<script src="//msiter.ru/myScript2.js"></script>

Внешние ссылки

В качестве ссылок на внешние скрипты может использоваться либо абсолютный URL, либо относительный путь к текущей веб-странице.

В следующем примере для подключения внешнего скрипта используется полный URL:


<script src="//msiter.ru/js/myScript1.js"></script>

В следующем примере скрипт расположен в подкаталоге текущего веб-сайта:


<script src="//msiter.ru/js/myScript1.js"></script>

В следующем примере скрипт расположен в том же подкаталоге что и текущая страница:


<script src="//msiter.ru/myScript1.js"></script>

Устаревшие и нестандартные браузеры

Для обеспечения совместимости со старыми браузерами, которые не умеют работать со скриптами Javascript, код скрипта размещают внутри тегов комментариев HTML <!— и —>. Если пренебречь этой предосторожностью, то браузер, не знающий Javascript, просто выведет на экран код скрипта в виде обычного текста. К счастью таких нестандартных браузеров в настоящее время практически не осталось. Однако подобный код все еще встречается, и стоит знать для чего он используется.


<html>
<head>
	<title>Пример JavaScript</title>
</head>

<body>
<script type="text/javascript">
<!--
	document.write("Привет, Мир!")
// -->
</script>

</body>
</html>

В приведенном выше примере сразу же после тега <script type=»text/javascript»> вставлен открывающий тег HTML комментария <!—, а перед тегом </script> вставлен закрывающий тег комментария —>. При этом перед закрывающим тегом HTML комментария поставлен двойной прямой слэш //, который является уже комментарием JavaScript, показывающий, что строка после него является комментарием с точки зрения JavaScript. Назначения этого комментария JavaScript — указать браузерам, умеющим работат с JavaScript, что символы → следует проигнорировать.

Вывод данных Javascript Вверх Версии Javascript

Добавляем React на сайт – React

Используйте React в том объёме, в котором вам хочется.

Для внедрения React не надо ничего переписывать. Его можно использовать как для маленькой кнопки, так и для целого приложения. Возможно, вы захотите немного «оживить» вашу страницу. React-компоненты подходят для этого как нельзя лучше.

Большинство сайтов в Интернете является обычными HTML-страницами. Даже если ваш сайт не относится к одностраничным приложениям, вы можете добавить на него React, написав всего несколько строк кода без каких-либо инструментов сборки. В зависимости от целей, можно постепенно перенести на React весь сайт или переписать всего несколько виджетов.


Добавляем React за одну минуту

В этом разделе вы научитесь добавлять React на существующую HTML-страницу. Вы можете практиковаться на своём собственном сайте или создать для этого пустой HTML файл.

Мы не будем пользоваться сложными инструментами сборки или что-то устанавливать. Всё, что вам нужно — это доступ к Интернету и минута свободного времени.

Необязательно: скачать готовый пример (архив 2 Кбайт)

Шаг 1: Добавляем DOM-контейнер в HTML

Для начала, откройте HTML файл страницы, которую хотите отредактировать. Добавьте пустой тег <div> в месте, где вы хотите отобразить что-нибудь с помощью React. Например:



<div></div>

Затем назначьте созданному <div> уникальный атрибут id. Это позволит впоследствии найти тег из JavaScript кода и отобразить React-компоненты внутри него.

Совет

«Контейнер» <div> можно поместить где угодно внутри тега <body>. Вы можете создать любое количество независимых DOM-контейнеров на одной странице. Эти контейнеры принято оставлять пустыми, так как React в любом случае заменяет всё их содержимое.

Шаг 2: Добавляем script-теги

Теперь добавьте три <script>-тега перед закрывающим тегом </body>:

  

  
  
  <script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin></script>  <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin></script>
  
  <script src="like_button.js"></script>
</body>

Первые два тега загружают React. Третий тег загружает код вашего собственного компонента.

Шаг 3: Создаём React-компонент

Создайте файл с именем like_button.js рядом с вашим HTML файлом.

Возьмите этот стартовый код и вставьте его в созданный ранее файл.

Совет

В данном коде создаётся React-компонент с именем LikeButton. Не беспокойтесь, если что-то кажется вам непонятным — мы подробно разберём принципы разработки на React позже, в нашем практическом руководстве и во введении в основные понятия. Пока же мы просто посмотрим, как это выглядит на экране.

Добавьте ещё 2 строки в конец файла like_button.js, после стартового кода:



const domContainer = document.querySelector('#like_button_container');ReactDOM.render(e(LikeButton), domContainer);

Эти две строки кода ищут элемент <div>, который мы добавили на первом шаге, а затем отображают React-компонент с кнопкой «Нравится» внутри него.

Готово!

Вот и всё! Вы только что добавили свой первый React-компонент на страницу.

Перейдите к следующим разделам, если хотите узнать о других способах добавить React.

Посмотреть финальный код примера

Скачать код примера (архив 2 Кбайт)

Совет: Повторное использование компонентов

Зачастую, вам может понадобиться отобразить React-компонент в нескольких местах одной и той же HTML-страницы. Вот как можно показать сразу три кнопки «Нравится» с разными данными:

Посмотреть исходный код примера

Скачать код примера (архив 2 Кбайт)

Примечание

Этот способ лучше всего подходит для страниц, содержащих несколько изолированных участков кода, написанных на React. Внутри чистого React-кода проще использовать композицию компонентов.

Совет: Минификация JavaScript для продакшена

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

Если вы уже минифицируете свои скрипты, то не забудьте подготовить к продакшену сам React. Для этого поменяйте окончания ссылок на React на production.min.js:

<script src="https://unpkg.com/react@17/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js" crossorigin></script>

Если же вы не настроили минификацию для ваших скриптов, то вот один из вариантов, как это сделать.

Необязательно: Используем React с JSX

В предыдущих примерах мы не выходили за рамки обычных браузерных возможностей. В частности, мы указываем, что React должен выводить на экран, просто вызывая JavaScript-функцию:

const e = React.createElement;


return e(
  'button',
  { onClick: () => this.setState({ liked: true }) },
  'Нравится'
);

Однако, React позволяет использовать специальный синтаксис, называющийся JSX:


return (
  <button onClick={() => this.setState({ liked: true })}>
    Нравится
  </button>
);

Эти два примера делают одно и то же. Несмотря на то, что JSX является совершенно необязательным, многие разработчики считают его удобным для разработки UI — как с React, так и с другими библиотеками.

Вы можете попробовать JSX в этом онлайн-конвертере.

Быстрый старт с JSX

Чтобы быстро попробовать JSX, добавьте такой <script>-тег на страницу:

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

Теперь синтаксис JSX доступен внутри каждого <script>-тега, у которого есть атрибут type="text/babel". Скачайте пример HTML-кода с JSX, чтобы поэкспериментировать.

Такой подход удобен для обучения или создания быстрых демо, но следует помнить, что работа сайта при этом сильно замедляется. Поэтому для продакшена JSX лучше добавить по-другому. Если вам интересно попробовать, удалите добавленный ранее <script>-тег и все атрибуты type="text/babel". Вместо них мы будем пользоваться препроцессором JSX, который автоматически трансформирует весь код внутри <script>-тегов.

Добавляем JSX в проект

JSX можно добавить в существующий проект и без разных сложных инструментов вроде бандлера или сервера для разработки. По сути, добавление JSX напоминает добавление препроцессора CSS. Необходимо лишь убедиться, что на вашем компьютере установлен Node.js.

С помощью терминала перейдите в директорию вашего проекта и запустите следующие команды:

  1. Шаг 1: Запустите команду npm init -y (если появляются ошибки, попробуйте этот способ)
  2. Шаг 2: Запустите команду npm install babel-cli@6 babel-preset-react-app@3

Совет

Мы используем npm только для установки препроцессора JSX. React и код приложения всё ещё остаются в <script>-тегах.

Поздравляем! Вы только что добавили в ваш проект поддержку JSX, готовую к продакшену.

Запускаем препроцессор JSX

Создайте директорию с названием src и наберите в терминале следующую команду:

npx babel --watch src --out-dir . --presets react-app/prod

Примечание

npx не является опечаткой. Это инструмент запуска пакетов, появившийся в npm версии 5.2+.

Если у вас появляется сообщение об ошибке, похожее на «You have mistakenly installed the babel package», то это означает, что вам нужно пройти предыдущий шаг, а затем повторить запуск команды.

Дожидаться завершения работы команды не нужно — она работает в режиме наблюдения за изменениями в JSX-коде.

Попробуйте создать файл с названием src/like_button.js и вставить в него этот стартовый JSX-код. Препроцессор автоматически трансформирует новый код в чистый JavaScript, пригодный для выполнения в браузере, и сохранит его в новый файл like_button.js. При редактировании JSX-кода в существующих файлах трансформация также происходит автоматически.

Кроме препроцессинга JSX, вы в качестве бонуса получаете синтаксические новинки JavaScript, такие как классы, без головной боли с их браузерной поддержкой. Всё это доступно благодаря использованию инструмента под названием Babel, информацию о котором вы можете узнать из его документации.

Если вы неплохо разбираетесь в инструментах сборки и хотите создавать приложения на React с их помощью, обратитесь к следующему разделу, где описаны некоторые из наиболее популярных способов. Если нет — не беспокойтесь, уже знакомые нам script-теги ничуть не хуже!

Подключение скрипта JavaScript

От автора: приветствую вас, друзья. В этой статье мы с вами узнаем, как перенести наш код JavaScript во внешний файл и подключить скрипт JavaScript. Статья ориентирована на новичков, начинающих свое изучение языка JavaScript.

Итак, начнем с вопроса, а зачем вообще нужно выносить код JavaScript во внешний файл? Все просто. Представьте, что ваш скрипт занимает десятки или сотни строк кода. Или даже больше. И, конечно же, этот скрипт нам, скорее всего, потребуется на каждой странице нашего сайта. Согласитесь, будет совсем нехорошо в этом случае дублировать в каждом файле эти сотни строк кода. Да и просто наличие не HTML кода в документе HTML будет смотреться не очень правильно и не очень красиво.

Именно поэтому код JavaScript принято выносить в отдельный файл, который и подключается к страничке. Собственно, все так же, как и в случае с файлами стилей. Как же подключить скрипт JavaScript к основному файлу? Очень просто. Для этого используются уже знакомый нам тег <script>, к которому добавляется атрибут src, точно так же, как и в случае с картинками. Ну и, как вы уже догадались, в атрибуте src указывается путь к подключаемому скрипту JavaScript.

Давайте попробуем перенести нашу программу, состоящую из одной строки кода, во внешний файл и подключим этот файл. Назовем этот файл, к примеру, scripts.js:

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

Обратите внимание, внутри подключаемого файла нам нужно писать теги script. Мало того, если мы их напишем в файле .js, то наш код JavaScript перестанет работать, и мы получим ошибку JavaScript.

Ну и само подключение внешнего файла JavaScript:

<script src=»scripts.js»></script>

<script src=»scripts.js»></script>

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

На что стоит обратить внимание при подключении скриптов? Мы подключили скрипт в конце документа, перед закрывающим тегом body. Ранее практиковалось подключение скриптов в начале документа, в тегах head. Однако сегодня так делать не рекомендуется и скрипты рекомендуют подключать именно в конце документа. Почему так?

Давайте попробуем перенести подключения между тегами head:

Что мы видим? Ничего, кроме модального окна. Никакого контента нет. В этом и суть. Когда внешний скрипт подключается в начале документа, браузер начинает загружать его и пытается выполнить. И пока загрузка и выполнение скрипта не будут завершены, браузер не покажет часть документа, следующую после подключаемого файла.

А теперь представьте, что этот файл по каким-то причинам загружается крайне медленно. В результате пользователю придется ждать, и порой он может просто не дождаться. Именно поэтому скрипты рекомендуется подключать в конце документа, перед закрывающим тегом body.

Но что делать, если некая библиотека требует подключения именно в начале документа? Как быть в этом случае? В этом случае нас выручат атрибуты async и defer, которые позволяют браузеру загружать скрипты асинхронно, т.е. браузер начнет загружать скрипт, но при этом не остановит показ документа. Попробуем поочередно использовать данные атрибуты:

<!— вариант 1 —>
<script src=»scripts.js» async></script>
<!— вариант 2 —>
<script src=»scripts.js» defer></script>

<!— вариант 1 —>

<script src=»scripts.js» async></script>

<!— вариант 2 —>

<script src=»scripts.js» defer></script>

В обоих случаях мы получим одинаковый результат, скрипт подключается, не прерывая показ документа:

В чем же отличие атрибутов async и defer друг от друга? Атрибут defer сохраняет последовательность подключения внешних скриптов, т.е. первым всегда выполнится тот скрипт, который подключается выше. Это важно в том случае, когда мы подключаем несколько скриптов и какой-то из них может зависеть от другого. В этом случае основной скрипт должен подключаться раньше зависимого. Атрибут defer гарантирует соблюдение порядка. Атрибут async же обеспечит выполнение скрипта сразу после его загрузки. Поэтому такой вариант не всегда подойдет, поскольку зависимый скрипт может загрузиться раньше основного.

На этом статья подошла к концу. Если вы хотите больше узнать о JavaScript, тогда рекомендую обратить свое внимание на уроки по JavaScript и отдельный курс по языку JavaScript. Удачи!

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Узнать подробнее

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

Смотреть

Подключение стилей и скриптов к сайту. Внешняя (CDN) и внутренняя (местная) прописка стиля

Рассмотрим варианты подключения стилей и скриптов к сайту в соответствии с современными 2020 требованиям оформления HTML5 кода.

Подключить css стили можно несколькими способами:
1. Через свой внешний файл: путь/css/style.css
2. Используя чужой внешний файл (CDN) со стороннего сайта: https://чужой-сайт.com/…/style.css
3. Местная прописка на конкретной странице при использовании напрямую, вместо

Подключение js скриптов выполняется аналогично, несколькими способами:
1. Можно использовать свой внешний файл: путь/js/script.js
2. Файл с чужого сайта: https://чужой-сайт.com/../script.js
3. Подключение на конкретной странице: <script>…</script>

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

Пример подключение стиля из внешних файлов:

Свой внешний файл:
используется часто.

Чужой внешний файл:
<link rel=»stylesheet» href=»https://use.fontawesome.com/releases/v5.0.13/css/all.css»>
не рекомендую (может ругаться подключение по HTTPS протоколу). В зависимости от настройки браузеров, у пользователя может появляться сообщение о нарушении безопасности соединения. Особенно это относится к CDN подключению сторонних js файлов. Надёжнее скачать сторонний файл и подключить его внутренними средствами.

Подключение имени стиля в страницу из внешнего файла:
<p>текст</p>
<div>объект</div>
name-out — класс прописанный в файле css.

Пример местной прописки стиля внутри страницы

Быстрое (ленивое, тестовое) подключение, когда лень заходить во внешний файл

1 вариант ленивого подключения:
<p>текст</p>
<div>объект</div>

2 вариант местного подключения между тегами <head>…</head>:
<style type=»text/css»>
.name-local {margin: 20px 20px;}
</style>

<p>текст</p>
<div>объект</div>
name-local — имя класса прописанного между тегами <head>…</head>

Подключение .js скриптов перед заключительными тегами </body></html>

Местное подключение на странице или активация команд:

Свой внешний файл:
<script src=»js/jquery-3.5.1.min.js»></script>

Чужой внешний файл:
<script src=»https://code.jquery.com/jquery-3.5.1.min.js»></script>

Подключать скрипты сейчас модно и необходимо в конце страницы перед закрывающими тегами </body></html>.
Обоснование:
Любой браузер останавливает своё чтение страницы в месте, где встречает тег <script…
Поэтому, для более быстрого загрузки страницы, подключение скриптов лучше отложить на самый последний момент.
Ведь выполнение скрипта не нужно пользователю пока он не увидит контента страницы.

Скачать примеры страниц сайта с подробными комментариями в коде. В архиве три папки с файлами разных вариантов подключения CSS стилей:

Connectivity_options_styles.rar [6,3 Kb] (cкачиваний: 7)

Асинхронная и отложенная загрузка JavaScript

Приветствую, друзья! Знаете ли вы, что загрузка JavaScript является одним из самых узких мест в производительности сайта? Сегодня моя основная задача — объяснить что такое асинхронная загрузка скрипта и каким образом она влияет на быстродействие и производительность сайта.

Браузер, загружающий тег <script>, останавливает рендеринг страницы до тех пор, пока не загрузится и не исполнится скрипт. Страница заблокирована и браузер пару секунд не отвечает на действия пользователя. Время задержки зависит от нескольких факторов:

  • конфигурации хостинга,
  • скорости интернет-соединения,
  • размера файла и других…

По этой причине анализатор скорости загрузки сайта Google PageSpeed Insights рекомендует удалить из верхней части страницы код JavaScript, блокирующий её отображение. Хорошей практикой является размещение скриптов в нижней части сайта, например, перед закрывающим тегом </body> или настройка асинхронной загрузки.

Если код скрипта влияет на отображение верхней части сайта — не выносите его в отдельный файл, а встраивайте непосредственно в HTML.

JS может изменить содержимое сайта и даже перенаправить на другой URL-адрес. В таком случае подключение скрипта в конце документа приведёт к эффекту «подергивания» страницы, подгружая новые или изменяя существующие элементы в верхней части.

Применение атрибутов async и defer для тега script

Давайте разберёмся, что из себя представляет асинхронная и отложенная работа JavaScript и какая принципиальная разница между атрибутами async и defer. Но вначале рассмотрим последовательность обработки документа при обычном подключении тега <script>.

<script src="example.js"></script>

В наглядном примере я буду использовать следующие условные обозначения:

— обработка страницы
— загрузка скрипта
— выполнение скрипта

Таким образом, последовательность обработки документа происходит по следующей схеме:

Разбор HTML-кода прерывается на время загрузки и выполнения скрипта, после чего продолжается. Отображение веб-страницы происходит с задержкой.

Атрибут defer

Атрибут defer позволяет браузеру начать загрузку js-файлов параллельно, не останавливая дальнейшую обработку страницы. Их выполнение происходит после полного разбора объектной модели документа (от англ. Document Object Model, сокращенно DOM), при этом браузер гарантирует последовательность на основе порядка подключения файлов.

<script defer src="example.js"></script>

Схема последовательности обработки:

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

Атрибут async

Поддержка атрибута async появилась в HTML5, он разрешает браузеру загружать js-файлы параллельно и выполнять сразу после загрузки, не дожидаясь обработки остальной части страницы.

<script async src="example.js"></script>

Схема последовательности обработки:

Это асинхронная загрузка. Атрибут рекомендуется применять для таких скриптов, которые не оказывают значительного влияния на отображение документа. К ним относятся счётчики сбора статистики (Google Analytics, Яндекс Метрика), коды рекламных сетей (Рекламная сеть Яндекса, Google AdSense), кнопки социальных сетей и так далее.

Скорость загрузки сайта — один из факторов ранжирования в Google.

Асинхронное подключение JavaScript снижает время загрузки страниц за счёт отсутствия задержки. Наряду с этим я рекомендую сжимать и объединять js-файлы в один, например, с помощью библиотеки Minify. Пользователям нравятся быстрые сайты 😎

Использование Node.js в качестве простого веб-сервера

Простейший сервер Node.js всего:

  $ npm установить http-сервер -g
  

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

  $ CD MyApp

$ http-сервер
  

Если вы используете NPM 5.2.0 или новее, вы можете использовать http-server без его установки с npx . Это не рекомендуется для использования в производственной среде, но это отличный способ быстро запустить сервер на localhost.

  $ npx http-сервер
  

Или вы можете попробовать это, которое открывает ваш веб-браузер и разрешает запросы CORS:

  $ http-сервер -o --cors
  

Чтобы узнать о дополнительных параметрах, ознакомьтесь с документацией для http-server на GitHub или запустите:

  $ http-сервер --help
  

Множество других приятных функций и невероятно простое развертывание в NodeJitsu.

Характеристики вилки

Конечно, вы можете легко пополнить возможности собственным форком.Возможно, вы обнаружите, что это уже сделано в одной из существующих 800+ вилок этого проекта:

Light Server: альтернатива автообновлению

Хорошая альтернатива http-server light-server . Он поддерживает просмотр файлов и автоматическое обновление, а также многие другие функции.

  $ npm install -g легкий сервер
$ light-server
  

Добавить в контекстное меню каталога в проводнике Windows

  рег.exe добавить HKCR \ Directory \ shell \ LightServer \ command / ve / t REG_EXPAND_SZ / f / d "\" C: \ nodejs \ light-server.cmd \ "\" - o \ "\" - s \ "\"% V \ ""
  

Простой сервер JSON REST

Если вам нужно создать простой REST-сервер для прототипа проекта, возможно, вы ищете json-server.

Автообновляющиеся редакторы

Большинство редакторов веб-страниц и инструментов IDE теперь включают веб-сервер, который будет следить за вашими исходными файлами и автоматически обновлять вашу веб-страницу при их изменении.

Я использую Live Server с Visual Studio Code.

Текстовый редактор с открытым исходным кодом Brackets также включает статический веб-сервер NodeJS. Просто откройте любой HTML-файл в скобках, нажмите « Live Preview », и он запустит статический сервер и откроет ваш браузер на странице. Браузер будет автоматически обновлять всякий раз, когда вы редактируете и сохраняете HTML-файл. Это особенно полезно при тестировании адаптивных веб-сайтов. Откройте свою HTML-страницу в разных браузерах / размерах окон / устройствах. Сохраните свою HTML-страницу и сразу посмотрите, работает ли ваш адаптивный материал, так как все все автоматически обновляются.

Web / SPA / PWA / Mobile / Desktop / Browser Ext Веб-разработчики

Некоторые фреймворки SPA включают встроенную версию Webpack DevServer, которая может обнаруживать изменения исходного файла и запускать инкрементную перестройку и исправление (так называемую горячую перезагрузку) вашего веб-приложения SPA или PWA. Вот несколько популярных фреймворков SPA, которые могут это сделать.

Разработчики VueJS

Для разработчиков VueJS фаворитом является Quasar Framework, который включает в себя Webpack DevServer из коробки с переключателями для поддержки рендеринга на стороне сервера (SSR) и правил прокси для решения ваших проблем CORS.Он включает в себя большое количество оптимизированных компонентов, предназначенных для адаптации как для мобильных, так и для настольных компьютеров. Это позволяет создавать одно приложение для ВСЕХ платформ (SPA, SPA + SSR, PWA, PWA + SSR, приложения Cordova и Capacitor Mobile AppStore, приложения Electron Desktop Node + VueJS и даже расширения для браузера).

Другой популярный — NuxtJS, который также поддерживает генерацию статического кода HTML / CSS, а также режимы сборки SSR или без SSR с плагинами для других наборов компонентов пользовательского интерфейса.

Разработчики React Framework

Разработчики

ReactJS также могут настроить горячую перезагрузку.

Разработчики Cordova / Capacitor + Ionic Framework

Iconic — это гибридная компонентная среда только для мобильных устройств , которая теперь поддерживает разработку на VueJS, React и Angular. Локальный сервер с функциями автоматического обновления встроен в инструмент ionic . Просто запустите ionic serve из папки вашего приложения. Еще лучше … ionic serve --lab для одновременного просмотра автоматически обновляющихся изображений iOS и Android.

Как связать JavaScript с HTML

Чтобы связать файл JavaScript с документом HTML, используйте тег , где myExternalFile.js - расположение внешнего файла.




Мой пример



Приведенный выше пример ссылается на внешний файл JavaScript. Местоположение файла JavaScript предоставляется как значение атрибута src .Когда файл HTML загружается, также загружается файл JavaScript.

Размещение тегов



В этом втором примере используется тот же JavaScript, что и в первом примере (изменился только текст).Единственное отличие состоит в том, что JavaScript теперь встроен в документ HTML, а не во внешнем файле.

Опять же, это необязательно должно быть в элементе - он может быть расположен в любом месте HTML-документа.

Тип

Атрибут

Вы можете использовать атрибут type , чтобы явно указать тип сценария. Если вы опустите этот атрибут, сценарий будет рассматриваться как JavaScript.Поэтому нет необходимости использовать этот атрибут, если сценарий написан на JavaScript.

Если сценарий написан не на JavaScript, следует использовать атрибут type , чтобы явно указать тип сценария.

Добавьте файл JavaScript в HubSpot

Вы можете размещать и редактировать файлы JavaScript в диспетчере дизайна. Узнайте, как создать файл JavaScript и связать его с шаблоном или доменом.

Создать файл JavaScript

  • В своей учетной записи HubSpot перейдите к Marketing > Файлы и шаблоны > Инструменты дизайна .
  • В меню левой боковой панели щелкните Файл > Новый файл . Вам может потребоваться щелкнуть папку значок папки , чтобы раскрыть меню.
  • В диалоговом окне щелкните Что бы вы хотели построить сегодня? В раскрывающемся меню выберите JavaScript .
  • Щелкните Далее .
  • В поле Имя файла введите имя для вашего файла JavaScript.
  • Чтобы обновить расположение файла, в разделе Расположение файла щелкните Изменить и выберите папку , в которую нужно добавить файл.
  • Щелкните Создать .
  • Введите или вставьте код JavaScript в редактор кода.
  • Если вы включили ESLint, вы можете увидеть любые предупреждения или ошибки JavaScript, щелкнув переключатель Показать вывод .

  • В правом верхнем углу нажмите Опубликовать изменения , чтобы изменения вступили в силу.

Прикрепите файл JavaScript к шаблону

  • В искателе слева щелкните шаблон , который вы хотите обновить.
  • В инспекторе справа щелкните вкладку Изменить .
  • В разделе Связанные файлы JavaScript щелкните раскрывающееся меню Добавить и выберите свой файл JavaScript .
  • В правом верхнем углу нажмите Опубликовать изменения , чтобы изменения вступили в силу.

Включить файл JavaScript на страницы HubSpot

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

Чтобы получить доступ к общедоступному URL-адресу файла:

  • В меню левой боковой панели выберите файл JavaScript .
  • Щелкните Действия > Скопируйте общедоступный URL-адрес .

Чтобы добавить файл на все страницы HubSpot в домене:

  • В своей учетной записи HubSpot щелкните значок настроек Настройки на главной панели навигации.
  • В меню левой боковой панели перейдите на Веб-сайт > Страницы .
  • Щелкните раскрывающееся меню Выберите домен, чтобы изменить его настройки. и выберите домен , в который нужно добавить файл JavaScript. Вы можете выбрать Настройки по умолчанию для всех доменов , если вы хотите, чтобы файл JavaScript применялся ко всем подключенным доменам.
  • В разделе HTML нижнего колонтитула сайта вставьте общедоступный URL в качестве значения для источника тега скрипта:
  

Или, чтобы добавить файл на отдельную страницу:

  • В своей учетной записи HubSpot перейдите к Marketing > Website > Website Pages or Landing Pages .
  • Наведите указатель мыши на страницу , которую вы хотите отредактировать, затем щелкните Изменить .
  • В редакторе страниц щелкните вкладку Настройки .
  • Щелкните Дополнительные параметры .
  • В разделе Footer HTML вставьте общедоступный URL-адрес в качестве значения для источника тега скрипта:
  

  • Чтобы опубликовать изменения на странице в реальном времени, в правом верхнем углу нажмите Обновить .

Менеджер по дизайну

Введение в

Express / Node - Изучите веб-разработку

В этой первой статье Express мы отвечаем на вопросы «Что такое Node?» и «Что такое Express?» и дадут вам обзор того, что делает веб-платформу Express особенной.Мы опишем основные функции и покажем вам некоторые из основных строительных блоков приложения Express (хотя на данный момент у вас еще нет среды разработки, в которой можно было бы его протестировать).

Node (или более формально Node.js ) - это кроссплатформенная среда выполнения с открытым исходным кодом, которая позволяет разработчикам создавать все виды серверных инструментов и приложений на JavaScript. Среда выполнения предназначена для использования вне контекста браузера (т.е. работает непосредственно на компьютере или серверной ОС).Таким образом, в среде отсутствуют API-интерфейсы JavaScript для конкретных браузеров и добавлена ​​поддержка более традиционных API-интерфейсов ОС, включая HTTP и библиотеки файловой системы.

С точки зрения разработки веб-сервера Node имеет ряд преимуществ:

  • Отличная производительность! Node был разработан для оптимизации пропускной способности и масштабируемости в веб-приложениях и является хорошим решением многих распространенных проблем веб-разработки (например, веб-приложений в реальном времени).
  • Код

  • написан на «старом простом JavaScript», что означает, что меньше времени тратится на «сдвиг контекста» между языками, когда вы пишете как клиентский, так и серверный код.
  • JavaScript - это относительно новый язык программирования, который имеет преимущества от улучшений в дизайне языка по сравнению с другими традиционными языками веб-серверов (например, Python, PHP и т. Д.). Многие другие новые и популярные языки компилируются / конвертируются в JavaScript, поэтому вы также можете использовать TypeScript. , CoffeeScript, ClojureScript, Scala, LiveScript и т. Д.
  • Диспетчер пакетов узлов (NPM) предоставляет доступ к сотням тысяч повторно используемых пакетов. Он также имеет лучшее в своем классе разрешение зависимостей и может также использоваться для автоматизации большей части инструментальной цепочки сборки.
  • Node.js - переносимый. Он доступен в Microsoft Windows, macOS, Linux, Solaris, FreeBSD, OpenBSD, WebOS и NonStop OS. Кроме того, он хорошо поддерживается многими провайдерами веб-хостинга, которые часто предоставляют определенную инфраструктуру и документацию для размещения сайтов Node.
  • У него очень активная сторонняя экосистема и сообщество разработчиков с множеством людей, готовых помочь.

Вы можете использовать Node.js для создания простого веб-сервера с помощью пакета Node HTTP.

Hello Node.js

В следующем примере создается веб-сервер, который прослушивает любой тип HTTP-запроса по URL-адресу http://127.0.0.1:8000/ - когда запрос получен, сценарий ответит с строка: «Hello World». Если вы уже установили узел, вы можете выполнить следующие действия, чтобы опробовать пример:

  1. Открыть терминал (в Windows откройте утилиту командной строки)
  2. Создайте папку, в которой вы хотите сохранить программу, например, test-node , а затем войдите в нее, введя следующую команду в свой терминал:
     cd тестовый узел 
  3. Используя свой любимый текстовый редактор, создайте файл с именем hello.js и вставьте в него следующий код:
     
    const http = require ("http");
    
    const hostname = "127.0.0.1";
    const порт = 8000;
    
    
    const server = http.createServer ((req, res) => {
    
       
       res.writeHead (200, {'Content-Type': 'text / plain'});
    
       
       res.end ('Привет, мир \ n');
    });
    
    
    server.listen (порт, имя хоста, () => {
       console.log (`Сервер работает по адресу http: // $ {hostname}: $ {port} /`);
    })
      
  4. Сохраните файл в папке, которую вы создали выше.
  5. Вернитесь к терминалу и введите следующую команду:

Наконец, перейдите по адресу http: // localhost: 8000 в своем веб-браузере; вы должны увидеть текст « Hello World » в верхнем левом углу пустой веб-страницы.

Другие общие задачи веб-разработки непосредственно не поддерживаются самим Node. Если вы хотите добавить особую обработку для разных HTTP-глаголов (например, GET , POST , DELETE и т. Д.), Отдельно обрабатывайте запросы по разным URL-адресам («маршрутам»), обслуживайте статические файлы или используйте шаблоны для динамически создавать ответ, Node сам по себе не принесет особой пользы. Вам придется либо написать код самостоятельно, либо вы можете не изобретать колесо и использовать веб-фреймворк!

Express - это самая популярная веб-среда Node и базовая библиотека для ряда других популярных веб-платформ Node.Предоставляет механизмы для:

  • Записать обработчики запросов с разными HTTP-командами на разных URL-путях (маршрутах).
  • Интеграция с механизмами визуализации "просмотра" для генерации ответов путем вставки данных в шаблоны.
  • Задайте общие параметры веб-приложения, такие как порт, используемый для подключения, и расположение шаблонов, которые используются для отображения ответа.
  • Добавить дополнительное «промежуточное ПО» обработки запросов в любой момент конвейера обработки запросов.

Хотя Express сам по себе довольно минималистичен, разработчики создали совместимые пакеты промежуточного программного обеспечения для решения практически любой проблемы веб-разработки. Существуют библиотеки для работы с файлами cookie, сеансами, логинами пользователей, параметрами URL, данными POST , заголовками безопасности и многими другими . Вы можете найти список пакетов промежуточного программного обеспечения, поддерживаемых командой Express, на сайте Express Middleware (вместе со списком некоторых популярных пакетов сторонних производителей).

Примечание: Эта гибкость - палка о двух концах.Существуют пакеты промежуточного программного обеспечения для решения практически любой проблемы или требования, но разработка правильных пакетов для использования иногда может быть проблемой. Также не существует «правильного способа» структурировать приложение, и многие примеры, которые вы можете найти в Интернете, не оптимальны или показывают лишь небольшую часть того, что вам нужно сделать для разработки веб-приложения.

Node был первоначально выпущен только для Linux в 2009 году. Диспетчер пакетов NPM был выпущен в 2010 году, а встроенная поддержка Windows была добавлена ​​в 2012 году.На момент написания текущей версией LTS является Node v12.18.4, а последней версией является Node 14.13.0. Это крошечный снимок богатой истории; если хотите узнать больше, загляните в Википедию.

Express был первоначально выпущен в ноябре 2010 года и в настоящее время находится на версии API 4.17.1 (с 5.0 в «альфа»). Вы можете проверить журнал изменений для получения информации об изменениях в текущем выпуске и GitHub для получения более подробных исторических заметок о выпуске.

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

Нет какого-либо готового и окончательного показателя популярности серверных фреймворков (хотя вы можете оценить популярность, используя такие механизмы, как подсчет количества проектов GitHub и вопросов StackOverflow для каждой платформы). Лучше спросить, достаточно ли популярны Node и Express, чтобы избежать проблем, связанных с непопулярными платформами. Они продолжают развиваться? Можете ли вы получить помощь, если она вам понадобится? Есть ли у вас возможность получить оплачиваемую работу, если вы изучаете Express?

Если судить по количеству крупных компаний, использующих Express, количеству людей, вносящих свой вклад в базу кода, и количеству людей, предоставляющих как бесплатную, так и платную поддержку, то да, Express - популярный фреймворк!

Веб-фреймворки часто называют себя «самоуверенными» или «неверующими».

Фреймворки с мнением - это те, кто придерживается мнения о «правильном способе» решения любой конкретной задачи. Они часто поддерживают быструю разработку в определенной области (решение проблем определенного типа), потому что правильный способ делать что-либо обычно хорошо понят и хорошо задокументирован. Однако они могут быть менее гибкими при решении проблем за пределами своей основной области и, как правило, предлагают меньше вариантов того, какие компоненты и подходы они могут использовать.

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

Express не пользуется авторитетом. Вы можете вставить практически любое совместимое промежуточное ПО в цепочку обработки запросов практически в любом порядке. Вы можете структурировать приложение в виде одного или нескольких файлов, используя любую структуру каталогов. Иногда вам может казаться, что у вас слишком много вариантов!

На традиционном веб-сайте, управляемом данными, веб-приложение ожидает HTTP-запросов от веб-браузера (или другого клиента).Когда запрос получен, приложение определяет, какое действие требуется, на основе шаблона URL и, возможно, связанной информации, содержащейся в данных POST или GET . В зависимости от того, что требуется, он может затем читать или записывать информацию из базы данных или выполнять другие задачи, необходимые для удовлетворения запроса. Затем приложение вернет ответ веб-браузеру, часто динамически создавая HTML-страницу для отображения браузером, вставляя полученные данные в заполнители в шаблоне HTML.

Express предоставляет методы для определения того, какая функция вызывается для конкретного HTTP-глагола ( GET , POST , SET и т. Д.) И шаблона URL («Маршрут»), а также методы для определения того, какой шаблон («представление» ), где находятся файлы шаблонов и какой шаблон использовать для рендеринга ответа. Вы можете использовать промежуточное программное обеспечение Express для добавления поддержки файлов cookie, сеансов и пользователей, получения параметров POST / GET и т. Д. Вы можете использовать любой механизм базы данных, поддерживаемый Node (Express не определяет какое-либо поведение, связанное с базой данных).

В следующих разделах объясняются некоторые общие вещи, которые вы увидите при работе с кодом Express и Node .

Helloworld Express

Сначала давайте рассмотрим стандартный пример Express Hello World (мы обсуждаем каждую часть этого ниже и в следующих разделах).

Совет: Если у вас уже установлены Node и Express (или если вы устанавливаете их, как показано в следующей статье), вы можете сохранить этот код в текстовом файле под названием app.js и запустите его в командной строке bash, позвонив по номеру:

узел ./app.js

  const express = require ('экспресс');
константное приложение = экспресс ();
const порт = 3000;

app.get ('/', (req, res) => {
  res.send ('Привет, мир!')
});

app.listen (порт, () => {
  console.log (`Пример приложения, прослушивающего порт $ {port}!`)
});
  

Первые две строки требуют () (импорт) экспресс-модуля и создания экспресс-приложения.Этот объект, который традиционно называется app , имеет методы для маршрутизации HTTP-запросов, настройки промежуточного программного обеспечения, рендеринга HTML-представлений, регистрации механизма шаблонов и изменения параметров приложения, которые управляют поведением приложения (например, режим среды, определение маршрута с учетом регистра и т. д.)

Средняя часть кода (три строки, начинающиеся с app.get ) показывает определение маршрута . Метод app.get () определяет функцию обратного вызова, которая будет вызываться всякий раз, когда есть запрос HTTP GET с путем ( '/' ) относительно корня сайта.Функция обратного вызова принимает запрос и объект ответа в качестве аргументов и вызывает send () для ответа, чтобы вернуть строку «Hello World!»

Последний блок запускает сервер на указанном порту («3000») и выводит на консоль комментарий журнала. Когда сервер запущен, вы можете перейти на localhost: 3000 в своем браузере, чтобы увидеть возвращенный пример ответа.

Импорт и создание модулей

Модуль - это библиотека / файл JavaScript, которые можно импортировать в другой код с помощью функции Node require () . Express сам по себе является модулем, как и промежуточное программное обеспечение и библиотеки баз данных, которые мы используем в наших приложениях Express .

В приведенном ниже коде показано, как мы импортируем модуль по имени на примере инфраструктуры Express . Сначала мы вызываем функцию require () , определяя имя модуля в виде строки ( 'express' ) и вызывая возвращаемый объект для создания приложения Express. Затем мы можем получить доступ к свойствам и функциям объекта приложения.

  const express = require ('экспресс');
константное приложение = экспресс ();
  

Вы также можете создавать свои собственные модули, которые можно импортировать таким же образом.

Совет: Вам понадобится для создания ваших собственных модулей, потому что это позволяет вам организовать ваш код в управляемые части - монолитное однофайловое приложение трудно понять и поддерживать. Использование модулей также помогает управлять пространством имен, поскольку при использовании модуля импортируются только те переменные, которые вы явно экспортируете.

Чтобы сделать объекты доступными вне модуля, вам просто нужно предоставить их в качестве дополнительных свойств в объекте exports . Например, модуль square.js ниже представляет собой файл, который экспортирует методы area () и perimeter () :

  exports.area = function (width) {return width * width; };
export.perimeter = функция (ширина) {вернуть 4 * ширину; };
  

Мы можем импортировать этот модуль, используя require () , а затем вызвать экспортированный метод (ы), как показано:

  const square = require ('./квадрат');
console.log ('Площадь квадрата шириной 4 равна' + square.area (4));  

Примечание: Вы также можете указать абсолютный путь к модулю (или имя, как мы делали изначально).

Если вы хотите экспортировать весь объект в одном назначении вместо того, чтобы строить его по одному свойству за раз, назначьте его модулю .exports , как показано ниже (вы также можете сделать это, чтобы сделать корень объекта экспорта конструктором или другая функция):

  модуль.export = {
  area: function (width) {
    ширина возврата * ширина;
  },

  периметр: функция (ширина) {
    вернуть 4 * ширину;
  }
};
  

Примечание: Вы можете думать о , экспортирует как ярлык для module.exports внутри данного модуля. Фактически, exports - это просто переменная, которая инициализируется значением module.exports перед оценкой модуля. Это значение является ссылкой на объект (в данном случае пустой объект). Это означает, что exports содержит ссылку на тот же объект, на который ссылается модуль .экспорт . Это также означает, что, присвоив другое значение , экспортирует , он больше не привязан к модулю .exports .

Для получения дополнительной информации о модулях см. Модули (документация по API узла).

Использование асинхронных API-интерфейсов

Код JavaScript часто использует асинхронные, а не синхронные API-интерфейсы для операций, выполнение которых может занять некоторое время. Синхронный API - это API, в котором каждая операция должна завершиться до того, как может начаться следующая операция.Например, следующие функции журнала являются синхронными и выводят текст на консоль по порядку (первый, второй).

  console.log («Первый»);
console.log («Второй»);
  

Напротив, асинхронный API - это API, в котором API запускает операцию и немедленно возвращает (до завершения операции). После завершения операции API будет использовать некоторый механизм для выполнения дополнительных операций. Например, приведенный ниже код распечатает «Second, First», потому что, хотя метод setTimeout () вызывается первым и немедленно возвращается, операция не завершается в течение нескольких секунд.

  setTimeout (function () {
   console.log («Первый»);
   }, 3000);
console.log («Второй»);
  

Использование неблокирующих асинхронных API-интерфейсов в Node даже более важно, чем в браузере, потому что Node - это однопоточная среда выполнения, управляемая событиями. «Однопоточный» означает, что все запросы к серверу выполняются в одном потоке (а не порождаются отдельными процессами). Эта модель чрезвычайно эффективна с точки зрения скорости и ресурсов сервера, но это означает, что если какая-либо из ваших функций вызывает синхронные методы, выполнение которых занимает много времени, они будут блокировать не только текущий запрос, но и все остальные запросы, обрабатываемые ваше веб-приложение.

Существует несколько способов для асинхронного API уведомить ваше приложение о завершении работы. Наиболее распространенный способ - зарегистрировать функцию обратного вызова при вызове асинхронного API, которая будет вызываться после завершения операции. Это подход, использованный выше.

Совет: Использование обратных вызовов может быть довольно «беспорядочным», если у вас есть последовательность зависимых асинхронных операций, которые должны выполняться по порядку, поскольку это приводит к нескольким уровням вложенных обратных вызовов.Эта проблема широко известна как «ад обратного вызова». Эту проблему можно уменьшить с помощью хороших методов кодирования (см. Http://callbackhell.com/), использования такого модуля, как async, или даже перехода к функциям ES6, таким как Promises.

Примечание. Распространенным соглашением для Node и Express является использование обратных вызовов при первой ошибке. В этом соглашении первое значение в ваших функциях обратного вызова является значением ошибки, а последующие аргументы содержат данные об успехе. В этом блоге есть хорошее объяснение того, почему этот подход полезен: The Node.js Way - Общие сведения об обратных вызовах при первой ошибке (fredkschott.com).

Создание обработчиков маршрутов

В нашем примере Hello World Express (см. Выше) мы определили функцию обработчика маршрута (обратного вызова) для запросов HTTP GET к корню сайта ( '/' ).

  app.get ('/', (req, res) => {
  res.send ('Привет, мир!')
});
  

Функция обратного вызова принимает в качестве аргументов объект запроса и ответ. В этом случае метод вызывает send () в ответе, чтобы вернуть строку «Hello World!» Существует ряд других методов ответа для завершения цикла запроса / ответа, например, вы можете вызвать res.json () для отправки ответа JSON или res.sendFile () для отправки файла.

Совет по JavaScript: Вы можете использовать любые имена аргументов в функциях обратного вызова; когда вызывается обратный вызов, первым аргументом всегда будет запрос, а вторым всегда будет ответ. Имеет смысл назвать их так, чтобы вы могли идентифицировать объект, с которым работаете, в теле обратного вызова.

Объект приложения Express также предоставляет методы для определения обработчиков маршрутов для всех других HTTP-глаголов, которые в большинстве случаев используются точно так же:

checkout () , copy () , delete () , get () , head () , lock () , merge () , mkactivity ( ) , mkcol () , move () , m-search () , notify () , options () , patch () , post () , purge () , put () , report () , search () , подписаться () , trace () , unlock () , unlock () .

Существует специальный метод маршрутизации app.all () , который будет вызываться в ответ на любой HTTP-метод. Это используется для загрузки функций промежуточного программного обеспечения по определенному пути для всех методов запроса. В следующем примере (из документации Express) показан обработчик, который будет выполняться для запросов к / secret независимо от используемого HTTP-глагола (при условии, что он поддерживается модулем http).

  app.all ('/ secret', function (req, res, next) {
  приставка.log ('Доступ к секретному разделу ...');
  следующий();
});  

Маршруты

позволяют сопоставлять определенные шаблоны символов в URL-адресе, извлекать некоторые значения из URL-адреса и передавать их в качестве параметров обработчику маршрута (как атрибуты объекта запроса, переданного в качестве параметра).

Часто бывает полезно сгруппировать обработчики маршрутов для определенной части сайта вместе и получить к ним доступ, используя общий префикс маршрута (например, сайт с Wiki может иметь все связанные с Wiki маршруты в одном файле и получать к ним доступ с помощью маршрута префикс / wiki / ).В Express это достигается с помощью объекта express.Router . Например, мы можем создать наш вики-маршрут в модуле с именем wiki.js , а затем экспортировать объект Router , как показано ниже:

 

const express = require ('экспресс');
const router = express.Router ();


router.get ('/', function (req, res) {
  res.send ('Домашняя страница Wiki');
});


router.get ('/ about', function (req, res) {
  res.send ('Об этой вики');
});

module.exports = маршрутизатор;
  

Примечание: Добавление маршрутов к объекту Router аналогично добавлению маршрутов к объекту app (как показано ранее).

Чтобы использовать маршрутизатор в нашем основном файле приложения, мы должны затем require () модуль маршрута ( wiki.js ), а затем вызвать use () в приложении Express , чтобы добавить маршрутизатор к обработке промежуточного программного обеспечения. дорожка. После этого два маршрута будут доступны из / wiki / и / wiki / about / .

  const wiki = require ('./ wiki.js');

app.use ('/ вики', вики);  

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

Использование промежуточного программного обеспечения

Промежуточное программное обеспечение широко используется в приложениях Express для задач от обслуживания статических файлов до обработки ошибок и сжатия HTTP-ответов. В то время как функции маршрутизации завершают цикл HTTP-запрос-ответ, возвращая некоторый ответ HTTP-клиенту, функции промежуточного программного обеспечения обычно выполняют некоторую операцию с запросом или ответом, а затем вызывают следующую функцию в «стеке», которая может быть дополнительным промежуточным программным обеспечением или обработчик маршрута. Порядок вызова промежуточного программного обеспечения определяется разработчиком приложения.

Примечание: Промежуточное ПО может выполнять любую операцию, выполнять любой код, вносить изменения в объект запроса и ответа, а также может завершать цикл запрос-ответ. Если он не завершает цикл, он должен вызвать next () , чтобы передать управление следующей функции промежуточного программного обеспечения (или запрос останется зависшим).

Большинство приложений будут использовать стороннее промежуточное ПО для упрощения общих задач веб-разработки, таких как работа с файлами cookie, сеансы, аутентификация пользователей, запрос доступа POST и данные JSON, ведение журнала и т. Д.Вы можете найти список пакетов промежуточного программного обеспечения, поддерживаемых командой Express (который также включает другие популярные сторонние пакеты). Другие пакеты Express доступны в диспетчере пакетов NPM.

Чтобы использовать стороннее промежуточное программное обеспечение, вам сначала необходимо установить его в свое приложение с помощью NPM. Например, чтобы установить промежуточное ПО для регистратора HTTP-запросов morgan, вы должны сделать это:

Затем вы можете вызвать use () для объекта приложения Express , чтобы добавить промежуточное ПО в стек:

  const express = require ('экспресс');
const logger = require ('morgan');
константное приложение = экспресс ();
приложение.используйте (logger ('dev'));
...  

Примечание. Промежуточное ПО и функции маршрутизации вызываются в том порядке, в котором они объявлены. Для некоторого промежуточного программного обеспечения порядок важен (например, если промежуточное программное обеспечение сеанса зависит от промежуточного программного обеспечения cookie, тогда обработчик cookie должен быть добавлен первым). Почти всегда промежуточное программное обеспечение вызывается перед установкой маршрутов, или ваши обработчики маршрутов не будут иметь доступа к функциям, добавленным вашим промежуточным программным обеспечением.

Вы можете написать свои собственные функции промежуточного программного обеспечения, и вам, вероятно, придется это сделать (хотя бы для создания кода обработки ошибок).Отличие только между функцией промежуточного программного обеспечения и обратным вызовом обработчика маршрута состоит в том, что функции промежуточного программного обеспечения имеют третий аргумент , следующий за , который, как ожидается, будут вызывать функции промежуточного программного обеспечения, если они не завершают цикл запроса (когда вызывается функция промежуточного программного обеспечения. , он содержит следующую функцию , которая должна быть вызвана).

Вы можете добавить функцию промежуточного программного обеспечения в цепочку обработки для всех ответов с помощью app.use () или для определенного HTTP-глагола, используя связанный метод: app.get () , app.post () и т. д. Маршруты указываются одинаково для обоих случаев, хотя маршрут не является обязательным при вызове app.use () .

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

  const express = require ('экспресс');
константное приложение = экспресс ();


let a_middleware_function = function (req, res, next) {
  
  следующий();
}


app.use (a_middleware_function);


app.use ('/ someroute', a_middleware_function);


приложение.получить ('/', a_middleware_function);

app.listen (3000);  

JavaScript Tip: Выше мы объявляем функцию промежуточного программного обеспечения отдельно, а затем устанавливаем ее как обратный вызов. В нашей предыдущей функции обработчика маршрута мы объявили функцию обратного вызова, когда она использовалась. В JavaScript допустим любой подход.

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

Обслуживание статических файлов

Вы можете использовать экспресс.статическое промежуточное программное обеспечение для обслуживания статических файлов, включая ваши изображения, CSS и JavaScript ( static () - единственная функция промежуточного программного обеспечения, которая фактически является частью из Express ). Например, вы могли бы использовать строку ниже для обслуживания изображений, файлов CSS и файлов JavaScript из каталога с именем « public» на том же уровне, где вы вызываете node:

  app.use (экспресс.статический ('общедоступный'));
  

Любые файлы в общедоступном каталоге обслуживаются путем добавления их имени файла ( относительно к базовому "общедоступному" каталогу) к базовому URL-адресу.Так например:

  http: // localhost: 3000 / images / dog.jpg
http: // локальный: 3000 / css / style.css
http: // локальный: 3000 / js / app.js
http: // локальный: 3000 / about.html
  

Вы можете вызывать static () несколько раз для обслуживания нескольких каталогов. Если файл не может быть найден одной функцией промежуточного программного обеспечения, он будет передан следующему промежуточному программному обеспечению (порядок вызова промежуточного программного обеспечения зависит от вашего порядка объявления).

  ок. Использования (экспресс.статический ('общедоступный'));
app.use (express.static ('media'));
  

Вы также можете создать виртуальный префикс для своих статических URL-адресов вместо добавления файлов к базовому URL-адресу. Например, здесь мы указываем путь монтирования, чтобы файлы загружались с префиксом «/ media»:

  app.use ('/ media', express.static ('public'));
  

Теперь вы можете загружать файлы, которые находятся в общедоступном каталоге , с префикса пути / media .

  http: // localhost: 3000 / media / images / dog.jpg
http: // локальный: 3000 / медиа / видео / cat.mp4
http: // локальный: 3000 / media / cry.mp3 
 

Обработка ошибок

Ошибки обрабатываются одной или несколькими специальными функциями промежуточного программного обеспечения, которые имеют четыре аргумента вместо обычных трех: (err, req, res, next) . Например:

  app.use (function (err, req, res, next) {
  console.error (стек ошибок);
  res.status (500) .send («Что-то сломалось!»);
});
  

Они могут возвращать любой требуемый контент, но должны вызываться после всех остальных приложений .use () и направляет вызовы так, чтобы они были последним промежуточным программным обеспечением в процессе обработки запроса!

Express поставляется со встроенным обработчиком ошибок, который заботится обо всех оставшихся ошибках, которые могут возникнуть в приложении. Эта функция промежуточного программного обеспечения по умолчанию для обработки ошибок добавляется в конец стека функций промежуточного программного обеспечения. Если вы передадите ошибку в next () и не обработаете ее в обработчике ошибок, она будет обработана встроенным обработчиком ошибок; ошибка будет записана клиенту с трассировкой стека.

Примечание: Трассировка стека не включена в производственную среду. Чтобы запустить его в производственном режиме, вам необходимо установить для переменной среды NODE_ENV значение « production» .

Примечание. HTTP404 и другие коды состояния «ошибки» не рассматриваются как ошибки. Если вы хотите справиться с этим, вы можете добавить для этого функцию промежуточного программного обеспечения. Для получения дополнительной информации см. FAQ.

Дополнительную информацию см. В разделе Обработка ошибок (Экспресс-документация).

Использование баз данных

Приложения Express могут использовать любой механизм базы данных, поддерживаемый узлом Node (сам Express не определяет какого-либо конкретного дополнительного поведения / требований для управления базой данных). Есть много вариантов, включая PostgreSQL, MySQL, Redis, SQLite, MongoDB и т. Д.

Чтобы использовать их, сначала необходимо установить драйвер базы данных с помощью NPM. Например, чтобы установить драйвер для популярного NoSQL MongoDB, вы должны использовать команду:

Сама база данных может быть установлена ​​локально или на облачном сервере.В коде Express вам потребуется драйвер, подключитесь к базе данных, а затем выполните операции создания, чтения, обновления и удаления (CRUD). В приведенном ниже примере (из документации Express) показано, как с помощью MongoDB найти записи о «млекопитающих».

 
const MongoClient = требуется ('mongodb'). MongoClient;

MongoClient.connect ('mongodb: // localhost: 27017 / animals', function (err, db) {
  если (ошибка) бросить ошибку;

  db.collection ('млекопитающие'). find (). toArray (function (err, result) {
    если (ошибка) бросить ошибку;

    приставка.журнал (результат);
  });
});


const MongoClient = требуется ('mongodb'). MongoClient;
MongoClient.connect ('mongodb: // localhost: 27017 / animals', function (err, client) {
   если (ошибка) бросить ошибку;

   пусть db = client.db ('животные');
   db.collection ('млекопитающие'). find (). toArray (function (err, result) {
     если (ошибка) бросить ошибку;
     console.log (результат);
     client.close ();
   });
});
  

Другой популярный подход - косвенный доступ к базе данных через объектно-реляционный преобразователь (ORM). В этом подходе вы определяете свои данные как «объекты» или «модели», и ORM сопоставляет их с базовым форматом базы данных.Этот подход имеет то преимущество, что как разработчик вы можете продолжать мыслить в терминах объектов JavaScript, а не семантики базы данных, и что есть очевидное место для выполнения валидации и проверки входящих данных. Подробнее о базах данных мы поговорим в следующей статье.

Для получения дополнительной информации см. Интеграция с базой данных (Экспресс-документация).

Данные визуализации (представления)

Механизмы шаблонов (называемые «механизмами просмотра» в Express ) позволяют указать структуру выходного документа в шаблоне, используя заполнители для данных, которые будут заполняться, когда страница создается.Шаблоны часто используются для создания HTML, но могут также создавать другие типы документов. Express поддерживает ряд движков шаблонов, и здесь есть полезное сравнение наиболее популярных движков: Сравнение движков шаблонов JavaScript: Jade, Mustache, Dust и др.

В коде настроек вашего приложения вы устанавливаете механизм шаблонов для использования и место, где Express должен искать шаблоны, используя настройки «видов» и «механизмов просмотра», как показано ниже (вам также необходимо установить пакет, содержащий вашу библиотеку шаблонов. тоже!)

  const express = require ('экспресс');
const path = require ('путь');
константное приложение = экспресс ();


приложение.set ('просмотры', path.join (__ dirname, 'views'));


app.set ('механизм просмотра', 'some_template_engine_name');
  

Внешний вид шаблона будет зависеть от того, какой движок вы используете. Предполагая, что у вас есть файл шаблона с именем «index. », который содержит заполнители для переменных данных с именами «title» и «message», вы должны вызвать Response.render () в функции обработчика маршрута для создания и отправки HTML-ответ:

  app.get ('/', function (req, res) {
  рез.render ('index', {title: 'О собаках', message: 'Собаки молодцы!'});
});  

Для получения дополнительной информации см. Использование шаблонизаторов с Express (документация по Express).

Файловая структура

Express не делает никаких предположений относительно структуры или используемых вами компонентов. Маршруты, представления, статические файлы и другая логика, зависящая от приложения, могут находиться в любом количестве файлов с любой структурой каталогов. Хотя вполне возможно разместить все приложение Express в одном файле, обычно имеет смысл разделить ваше приложение на файлы на основе функций (например,г. управление учетными записями, блоги, доски обсуждений) и предметную область архитектурных проблем (например, модель, представление или контроллер, если вы используете архитектуру MVC).

В следующем разделе мы будем использовать Express Application Generator , который создает модульный каркас приложения, который мы можем легко расширить для создания веб-приложений.

Поздравляем, вы выполнили первый шаг на пути к Express / Node! Теперь вы должны понимать основные преимущества Express и Node и примерно то, как могут выглядеть основные части приложения Express (маршруты, промежуточное ПО, обработка ошибок и код шаблона).Вы также должны понимать, что, учитывая, что Express является малоизвестным фреймворком, то, как вы собираете эти части вместе, и библиотеки, которые вы используете, в значительной степени зависит от вас!

Конечно, Express намеренно является очень легкой структурой веб-приложений, поэтому большая часть его преимуществ и потенциала исходит от сторонних библиотек и функций. Мы рассмотрим их более подробно в следующих статьях. В нашей следующей статье мы рассмотрим настройку среды разработки Node, чтобы вы могли увидеть в действии некоторый код Express.

Упаковка Код JavaScript для Shiny

Если вы хотите написать собственный код JavaScript для настройки и расширения приложения Shiny, в конечном итоге вам нужно будет выяснить, как заставить Shiny обслуживать ваш JavaScript. Есть несколько различных возможностей:

  1. Вставьте JavaScript в код пользовательского интерфейса в виде буквального текста
  2. Создайте файл .js в каталоге www / и укажите на него ссылку из пользовательского интерфейса, используя

    client.js

     console.log ('Выполняется клиентский код');
    
    const button = document.getElementById ('myButton');
    button.addEventListener ('щелчок', функция (e) {
      console.log («нажата кнопка»);
    }); 

    server.js

     console.log ('Выполняется код на стороне сервера');
    
    const express = require ('экспресс');
    
    константное приложение = экспресс ();
    
    // обслуживаем файлы из публичного каталога
    приложение.используйте (express.static ('public'));
    
    // запускаем экспресс-веб-сервер, прослушивающий 8080
    app.listen (8080, () => {
      console.log ('прослушивание 8080');
    });
    
    // обслуживаем домашнюю страницу
    app.get ('/', (req, res) => {
      res.sendFile (__ dirname + '/index.html');
    }); 

    Теперь вы можете запустить свой серверный код с помощью узла server.js .

    Вам нужно будет закрыть (CTRL + C) сервер и перезапускать его каждый раз, когда вы вносите изменения в server.js . Во время разработки это может стать проблемой.Чтобы упростить этот процесс, установите nodemon - инструмент, который будет отслеживать изменения в вашем коде и при необходимости автоматически перезапускать сервер. Чтобы установить nodemon:

    npm install -g nodemon

    Затем вы можете запустить nodemon server.js , чтобы запустить свой сервер и перезагрузить его при внесении изменений.

    Попробуйте, перейдя по адресу http: // localhost: 8080. Когда вы нажимаете кнопку, он должен войти в консоль.

    Часть 3 - Подключение к MongoDB

    Предполагается, что у вас уже есть доступ к серверу, на котором запущен MongoDB.Есть несколько вариантов, которые вы можете использовать для этого:

    1. Установите MongoDB локально на свой компьютер, следуя этим инструкциям. Примечание: вам необходимо создать папку / data / db на Mac или C: \ data \ db в Windows, чтобы она действовала как хранилище данных для MongoDB. После установки вам необходимо, чтобы на вашем компьютере был запущен mongod и слушал соединения. Вы можете использовать Compass для управления данными в MongoDB. Вы должны создать базу данных, содержащую коллекцию с именем кликов .
    2. Используйте базу данных MongoDB на сервере IADT с именем daneel. Сначала используйте Compass для подключения к daneel и создайте коллекцию с именем clicks в вашей базе данных. В качестве имени пользователя и пароля следует использовать номер вашего студента (строчные n ). Затем используйте URL-адрес подключения mongodb: // n000xyz: n000xyz @ daneel из вашего кода JavaScript (где n000xyz - номер вашего ученика).
    3. Создайте бесплатную учетную запись в mLab. После того, как вы создали учетную запись, вы должны создать базу данных, содержащую коллекцию с именем , щелкнуть и добавить нового пользователя с доступом к этой коллекции. Примечание: вы не сможете получить доступ к mLab из IADT, поскольку трафик блокируется брандмауэром 😞. Опять же, вы можете проверить, что это работает, подключившись с помощью компаса.

    После того, как вы выполнили одну из описанных выше настроек и убедились, что можете подключиться с помощью Compass, вы можете переходить к подключению с помощью кода JavaScript на стороне сервера.

    Требовать модуль mongodb и добавить код подключения MongoDB к server.js :

     console.log ('Выполняется код на стороне сервера');
    
    const express = require ('экспресс');
    const MongoClient = требуется ('mongodb').MongoClient;
    константное приложение = экспресс ();
    
    // обслуживаем файлы из публичного каталога
    app.use (express.static ('общедоступный'));
    
    // подключаемся к базе данных и запускаем экспресс-сервер
    пусть дб;
    
    // *** Замените URL-адрес ниже URL-адресом вашей базы данных ***
    const url = 'mongodb: // user: password @ mongo_address: mongo_port / databaseName';
    // Например, для варианта 2) выше это будет:
    // const url = 'mongodb: // localhost: 21017 / databaseName';
    
    MongoClient.connect (url, (err, database) => {
      if (err) {
        вернуть console.log (ошибка);
      }
      db = база данных;
      // запускаем экспресс-веб-сервер, прослушивающий 8080
      приложение.слушайте (8080, () => {
        console.log ('прослушивание 8080');
      });
    });
    
    // обслуживаем домашнюю страницу
    app.get ('/', (req, res) => {
      res.sendFile (__ dirname + '/index.html');
    }); 

    Если вы все сделали правильно, то Node.

    Часть 4 - Щелчки кнопки записи в DB

    Давайте изменим client.js так, чтобы он отправлял HTTP-запрос POST на конечную точку API http: // localhost: 8080 / clicked на нашем сервере. Примечание: здесь мы используем fetch () , как описано в недавней лекции, мы также могли бы использовать XHR, jQuery, await + async или аналогичные средства для выполнения асинхронного запроса.

    client.js

     console.log ('Выполняется клиентский код');
    
    const button = document.getElementById ('myButton');
    button.addEventListener ('щелчок', функция (e) {
      console.log («нажата кнопка»);
    
      fetch ('/ clicked', {метод: 'POST'})
        .then (функция (ответ) {
          if (response.ok) {
            console.log («Клик был записан»);
            возвращение;
          }
          выдать новую ошибку («Запрос не удался.»);
        })
        .catch (функция (ошибка) {
          console.log (ошибка);
        });
    }); 

    Но... конечная точка API http: // localhost: 8080 / clicked еще не существует на нашем сервере. Мы можем настроить эту конечную точку (или маршрут), добавив следующее к end из server.js .

     // добавляем документ в коллекцию БД, записывающий событие клика
    app.post ('/ clicked', (req, res) => {
      const click = {clickTime: new Date ()};
      console.log (щелкните);
      console.log (БД);
    
      db.collection ('clicks'). save (click, (err, result) => {
        if (err) {
          вернуть console.log (ошибка);
        }
        приставка.log ('щелкните добавлено в базу данных');
        res.sendStatus (201);
      });
    }); 

    Обратите внимание, что добавлен маршрут POST по адресу http: // localhost: 8080 / clicked. Предоставляемый анонимный обратный вызов использует метод Mongo save () для добавления нового документа в коллекцию, содержащую текущую дату и время.

    Если вы попробуете это и просмотрите содержимое своей базы данных (с помощью такого инструмента, как Compass), вы увидите, что эти новые документы появляются в вашей коллекции кликов .

    Часть 5 - Получение данных из БД

    Добавьте новый маршрут к концу сервера .js :

     // получаем данные о кликах из базы данных
    app.get ('/ clicks', (req, res) => {
    
      db.collection ('клики'). find (). toArray ((err, result) => {
        если (ошибка) вернуть console.log (ошибка);
        res.send (результат);
      });
    }); 

    Это добавляет конечную точку GET по адресу http: // localhost: 8080 / clicks, которая вернет массив, содержащий все документы в базе данных, то есть записи о каждом нажатии кнопки. Чтобы проверить это, вы можете просто посетить http: // localhost: 8080 / clicks в браузере (убедитесь, что у вас установлен сервер .js , работающий в узле).

    Затем мы будем потреблять (использовать) эту конечную точку API из нашего клиентского кода. Мы добавим функцию setInterval () , которая будет опрашивать сервер каждую секунду, извлекать все данные о кликах, а затем отображать количество кликов в пользовательском интерфейсе.

    Добавьте это в конец client.js :

     setInterval (function () {
      fetch ('/ clicks', {метод: 'ПОЛУЧИТЬ'})
        .then (функция (ответ) {
          если (response.ok) return response.json ();
          throw new Error ('Request failed.');
        })
        .then (функция (данные) {
          document.getElementById ('counter'). innerHTML = `Кнопка была нажата $ {data.length} раз`;
        })
        .catch (функция (ошибка) {
          console.log (ошибка);
        });
    }, 1000); 

    Готово 🙌! Веб-страница теперь должна обновляться каждую секунду в зависимости от количества кликов, записанных в базе данных. Это будет записывать общее количество кликов от всех пользователей за несколько сеансов!

    Но ... есть задержка между нажатием кнопки и обновлением веб-страницы.Почему? Вы можете это улучшить?

    Ниже приведены окончательные версии трех ключевых файлов.

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *