Как пользоваться node js
Перейти к содержимому

Как пользоваться node js

  • автор:

Как использовать Node.js для создания серверных приложений

Node.js — это платформа, позволяющая разработчикам создавать серверные приложения на языке JavaScript. В этой статье мы рассмотрим основы создания серверных приложений с использованием Node.js.

Установка Node.js

Прежде всего, вам нужно установить Node.js на ваш компьютер. Загрузите установщик с официального сайта nodejs.org и следуйте инструкциям установки.

Создание сервера

Для создания сервера на Node.js, мы воспользуемся модулем http . Этот модуль предоставляет функции для работы с HTTP протоколом. Вот пример создания простого сервера:

const http = require('http'); const server = http.createServer((req, res) => < res.writeHead(200, ); res.end('Hello World!'); >); server.listen(3000, () => < console.log('Server is running at http://localhost:3000'); >);

В этом примере мы создали HTTP сервер, который будет слушать порт 3000 и отвечать текстом «Hello World!» на все входящие запросы.

Работа с URL и маршрутизация

Чтобы создать маршрутизацию для разных URL, вам потребуется обработать свойство url из объекта запроса req . Например, следующий код будет отвечать разным сообщениями в зависимости от запрашиваемого URL:

const http = require('http'); const url = require('url'); const server = http.createServer((req, res) => < const pathname = url.parse(req.url).pathname; if (pathname === '/') < res.writeHead(200, ); res.end('Home Page'); > else if (pathname === '/about') < res.writeHead(200, ); res.end('About Page'); > else < res.writeHead(404, ); res.end('Page Not Found'); > >); server.listen(3000, () => < console.log('Server is running at http://localhost:3000'); >);

Использование Express.js

Express.js — это популярный фреймворк для создания веб-приложений на Node.js. Он упрощает множество задач, связанных с созданием серверных приложений, таких как маршрутизация, обработка запросов и ответов, работа с сессиями и т.д.

Для начала вам нужно установить Express.js с помощью команды:

npm install express 

Теперь вы можете использовать Express.js для создания веб-приложения. Вот пример создания простого сервера с использованием Express:

const express = require('express'); const app = express(); app.get('/', (req, res) => < res.send('Home Page'); >); app.get('/about', (req, res) => < res.send('About Page'); >); app.listen(3000, () => < console.log('Server is running at http://localhost:3000'); >);

Теперь у вас есть базовые знания о том, как использовать Node.js для создания серверных приложений. Не забывайте изучать дополнительные материалы и практиковаться, чтобы улучшить свои навыки. Удачи! ��

Развертывание приложения Node.js с помощью Docker: пошаговая инструкция

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

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

Что такое Node.js?

Node.js — это прикладная платформа, позволяющая разработчикам быстро и легко создавать веб-приложения.

Мощная среда выполнения JavaScript с открытым исходным кодом существует с 2009 года, представляет собой кроссплатформенную среду исполнения, основанную на движке Chrome V8. Это означает, что она может работать на любой операционной системе, поддерживающей движок Chrome V8, включая платформы Windows, MacOS, Linux и Unix.

В Node реализована событийно-ориентированная архитектура, позволяющая создавать программы с высокой масштабируемостью и скоростью. Он также включает несколько встроенных библиотек JavaScript для сетевого программирования, таких как http-сервер и сетевые модули, например модули net и dns , для связи между различными компьютерами или устройствами через сетевое соединение.

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

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

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

Зачем нужен Docker?

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

Он обладает целым рядом преимуществ по сравнению с традиционными решениями виртуализации.

  • Контейнеры Docker гораздо легче виртуальных машин, благодаря чему удаётся значительно сокращает время, необходимое для запуска новых приложений на существующей инфраструктуре.
  • Docker упрощает процесс разработки. Можно запускать несколько изолированных приложений на одном хосте, при этом обеспечивается согласованность работы приложений на разных платформах. Это означает, что пользователи могут написать код один раз и развернуть его универсально на любой платформе.
  • Благодаря реестру библиотек образов пользователи могут быстро находить готовые образы, созданные другими пользователями или организациями, которые соответствуют их потребностям, что экономит время при настройке собственных сред или быстром развертывании новых приложений.
  • Любые обновления одного контейнера затрагивают все остальные, поскольку контейнеры работают под управлением одной и той же операционной системы. Это избавляет от необходимости обновлять каждый контейнер по отдельности, а значит, экономит не только время, но и ресурсы, связанные с использованием памяти.
  • Docker обеспечивает повышенную безопасность, поскольку каждое приложение изолировано от базовой инфраструктуры, а уязвимости в одном приложении не относятся к другому. Такой подход позволяет компаниям сохранять контроль над своими приложениями и при этом сокращать расходы на их обслуживание.
  • Благодаря простому в использовании интерфейсу Docker разработчики могут создавать собственные образы, которые можно повторно использовать в разных проектах, что обеспечивает максимальную надёжность. Это обеспечивает гибкость, поскольку каждое приложение запускается в своей собственной виртуальной среде с необходимыми зависимостями.

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

Что нужно перед началом работы

Первым делом нужно установить ПО на компьютер. Воспользуйтесь официальными ресурсами для скачивания.

Также вам могут пригодиться фреймворки и дополнительные инструменты для Node.js: Express, Meteor, Koa, Next.js, Micro, Socket.io.

Развертывание приложения Node.js

Процесс состоит из нескольких шагов, разберём их с примерами.

Создаём приложение в Node.js.

Сначала нужно настроить конфигурации и зависимости.

Создаём каталог с исходными файлами, где «node_app» — его название.

В нашем примере он корневой, переходим в него.

Создаём и открываем конфигурационный файл, оставляя в нём стандартные данные.

Обратите внимание на зависимость dependencies, где должен быть указан сетевой фреймворк Express.

Сохраняем и закрываем файл, а затем устанавливаем зависимости.

Исходный код приложения имеет следующую структуру.

timeweb.js — точка входа;

index.html — разметка веб-страницы.

В настоящих приложениях визуальное описание страничек находится в различных файлах, например, style.css. В нашем примере, чтобы ничего не усложнять, мы представим CSS-стили в HTML .

Создаём и открываем файл, в котором представлен минимальный код, необходимый для запуска сервера.

Готово. Переходим к следующему этапу.

Создаем Dockerfile

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

Инструкции из Dockerfile имеют вид «название и аргументы». Если необходимы комментарии, их ставят после символа #. Важно, что все инструкции выполняются в строгой последовательности, предусмотренной в файле.

Итак, с помощью следующей команды создаём и открываем Dockerfile.

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

Добавляем в Dockerfile инструкцию для использования Node.

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

  • Копирование конфигурационных файлов

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

COPY package.json package-lock.json ./

Для остальных файлов тоже актуальна команда COPY, при этом следует указать директорию, а не сам файл.

У нас есть возможность получить зависимости из реестра NPM.

RUN npm install

Также можно ввести сразу несколько команд в таком виде.

RUN [“command1”, “command2”, “command3”]

Эта инструкция применяется, когда контейнер уже задействован.

Создаем образ Docker

В Dockerfile есть описание, на базе которого формируется образ Docker. Нам нужно задать команду из корня каталога.

docker build . -t nodeproject

В данном случае -t устанавливает имя тега нового образа, в будущем он будет доступен по nodeproject:latest.

docker images nodeproject:latest

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

Запуск контейнера Docker

Образы возможно запускать в виде контейнеров, указывая их название.

docker run nodeproject

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

docker run -d nodeproject

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

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

В результате отобразится отчёт о выполненной операции.

Контейнер можно остановить. Вместе «name» укажите актуальное название.

docker stop name

Чтобы удалить его, введите следующую команду, также заменив название.

Логи автономного контейнера

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

docker logs myname

Как повысить эффективность работы

Для успешного использования Docker необходим надежный сервер, который будет обеспечивать требуемые ресурсы и производительность. Именно поэтому многие разработчики предпочитают взять в аренду сервер dedicated.

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

Сервер dedicated обеспечивает высокую производительность благодаря отсутствию других пользователей, которые могут влиять на работу вашего приложения. Это особенно важно для приложений Node.js, которые требуют большого количества ресурсов. Вы полностью контролируете сервер и можете настроить его под свои нужды. Вы можете выбрать операционную систему, в том числе Linux, установить необходимое ПО и настроить сетевые параметры.

Подведём итоги

Мы рассмотрели несколько команд и инструкций для создания приложения, Dockerfile и образа, а также запуска контейнеров и дальнейшей работы с ними. Использование Dockerfile позволяет автоматизировать процесс развертывания приложений и упростить работу разработчикам, особенно при использовании сервера dedicated.

Разработка на Node.js — 10 практик для повышения эффективности

Node.js — это программная платформа, которая популярна для бекэнд-разработки на JavaScript. Но при создании своего приложения на Node, новичок или искушённый разработчик должен следовать определённым практикам программирования.

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

Сохраняйте точную версию пакета в файл package.json

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

npm install express --save
  • «express» – название пакета;
  • «—save» – параметр, отвечающий за добавление зависимости в package.json.

Менеджер npm устанавливает назначенный пакет и фиксирует зависимость в файле package.json следующим образом:

"express": "^4.17.1",
  • «^4.17.1» – версия пакета.

Использование карета « ^ » предполагает, что для версии приемлемо значение в диапазоне « >=4.17.1

Это станет проблемой, если кто-либо ещё будет использовать файл package.json, который мы при помощи команды « npm install » создали для настройки среды приложения и установки зависимостей. При возникновении такой ситуации менеджер npm проигнорирует указанную в package.json версию и установит более новый пакет, который может некорректно работать в связке с программой.

Есть два метода предотвратить конфликт версий пакетов. В обоих случаях каждая новая зависимость будет прописываться в package.json с указанием точной версии (т. е. без символа карета).

Первый метод

Постоянно использовать « —save-exact » в случаях, когда нужно добавить устанавливаемый пакет в зависимости package.json :

npm install express --save --save-exact

Второй метод

Единственный раз настроить npm через конфигурационный файл .npmrc , чтобы при установке пакетов автоматически указывалась точная версия:

npm config set save-exact=true

Теперь, когда кто-либо другой будет использовать файл package.json для установки зависимостей, менеджер npm поставит пакет именно той версии, которая применялась во время разработки.

Применяйте средства перезапуска приложения

Во время программирования на Node.js вам придётся вручную останавливать и перезапускать приложение, чтобы применять даже небольшие изменения, внесённые в исходный код. Выполняя эти монотонные действия, можно обнаружить, что они мешают сосредоточиться на поставленной задаче.

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

Популярные утилиты мониторинга кода в Node.js

  • Nodemon автоматически перезапускает приложение при любом изменении кода. Пакет можно установить из библиотеки npm и в последующем работать с программой, используя в командной строке « nodemon » (например, запустив « nodemon app » вместо « node app »).
  • Forever также обеспечивает автоматический перезапуск, что и Nodemon, но имеет большую функциональность. Утилита способна установить рабочий каталог и записать логи, которые в обычном случае были бы отражены в дескрипторе файлов ( stdout ).
  • PM2 — это ещё один инструмент управления процессами. По сравнению с первыми двумя он предоставляет больше контроля и возможностей для управления процессами в условиях эксплуатации приложения.

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

Подобные программы можно настроить так, чтобы при «падении» сервера приложение автоматически перезапускалось. Это иногда помогает в случае возникновения несерьёзных сбоев.

Используйте руководства по стилю оформления

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

Программисты любят поспорить о том, какой стиль кода JavaScript лучше. Но этот выбор по большей части субъективен. Поэтому рекомендуется перед началом проекта согласовать или выбрать уже готовый стайл-гайд – руководство по стилю оформлению кода.

Есть инструменты, помогающие контролировать следование правилам выбранного стайл-гайда. Для проверки написанного кода можно использовать ESLint, а для автоматизации форматирования — Prettier.

Используйте синтаксис async/await

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

Тем не менее в JavaScript стандарта ES6 вскоре добавили возможность использования синтаксиса async/await . Поэтому каждому разработчику рекомендуется использовать это нововведение и стараться избегать попадания в «ад колбэков».

Вот пример лёгкого варианта «ада колбэков»:

function callbackHellExample(err, result, cb) < if (err) < cb(err) >functionA(result, (resultA) => < functionB(resultA, (resultB) =>< cb(resultB) >) >) >

Такого развития событий легко избежать, используя async/await :

async function asyncAwaitExample(err, result) < if (err) < return err >let resultA = await functionA(result) let resultB = await functionB(resultA) return resultB >

Выбирайте подходящее средство журналирования

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

Для Node есть несколько фреймворков, специализированных для ведения логов. Вот несколько примеров таких инструментов:

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

Объявляйте переменную с помощью спецификатора const

Применяя спецификатор const , вы не сможете переназначить или повторно использовать переменную после первого присвоения. Таким образом, const вынуждает объявлять новые переменные с подходящими именами. Это делает код чище и понятнее.

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

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

Важно также быть внимательным к области видимости таких ключевых слов, как const и var, прежде чем объявлять переменную.

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

Мы не включаем тестирование Node-приложения в число главных правил, поскольку выполнение этого условия уже должно подразумеваться по умолчанию. Тем не менее использование средств покрытия кода — одна из лучших практик, которой нужно следовать при разработке на Node.js.

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

Istanbul/NYC — отличный инструмент, выполняющий цветовую разметку кода, которая помогает определить области, не затронутые модульными тестами.

Для использования утилиты установите пакет при помощи npm в качестве зависимости на этапе разработки.

npm install nyc --save-dev

Затем добавьте скрипт для запуска NYC, и создайте отчёт по покрытию кода.

«scripts»:

Теперь можно использовать команду « npm coverage » для генерации отчётов.

Применяйте более строгий оператор «===»

В Node, для проверки равенства двух переменных, можно использовать оба оператора: « === » и « == ». В то время, как первый более точен, второй признаёт равными и переменные, эквивалентность которых условна.

Для оператора «===» обе переменные должны не только совпадать по значению, но и быть одного типа.

1 === 1 // true (истина) 1 === "1" // false (ложь) false === 0 // false 0 === “” // false “” === false // false null === undefined // false NaN === null // false NaN === undefined // false NaN === NaN // false

Второй оператор «==» считает две переменные одинаковыми, если равны их значения. Это происходит даже когда типы различны.

1 == 1 // true 1 == "1" // true false == 0 // true 0 == “” // true “” == false // true null == undefined // true NaN == null // false NaN == undefined // false NaN == NaN // false

По параметрам видно, что использование оператора «==» не всегда даёт ожидаемые ответы. Это не станет проблемой, если вы привыкнете к этим особенностям и будете учитывать их при написании программ.

Но можно не переживать из-за неочевидного поведения языка и просто использовать для сравнения строгий оператор равенства «===».

Не связывайте фронтенд с Node

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

Поток может перегружаться, если Node используется для отправки статического содержимого (HTML, CSS-файлов, медиафайлов и т. д.). Это неприемлемо при работе с динамическим контентом, для которой требуется максимально задействовать компоненты и логику работающего приложения. В результате несбалансированного распределения ресурсов, производительность приложения заметно снижается.

Чтобы избежать дисбаланса, нужно снять задачу обработки статического контента с сервера Node. Для этого можно установить стороннее промежуточное ПО (middleware), которое будет выполнять обслуживание пользователей по части фронтенда. Например, Nginx, S3 или CDN. Тогда Node будет свободно работать с динамическим контентом без потери производительности.

Не храните информацию в приложении

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

Иначе говоря, приложение не должно зависеть от какого-либо состояния (протокол stateless ). Нужно иметь возможность остановить сервер в любой момент и перезапустить его так, чтобы это не повлияло на пользователей. В качестве альтернативы можно использовать бессерверные платформы, такие как AWS Lambda, которые предполагают работу с stateless-протоколом по умолчанию.

Заключение

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

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

Нужна надёжная база для разработки веб-приложений? Выбирайте виртуальные сервера от Eternalhost с технической поддержкой 24/7 и бесплатной защитой от DDoS!

Импорт функций из других файлов в Node.js

Существует ситуация, которая часто встречается при написании кода на Node.js. Представим, что есть основной файл приложения, например, app.js , и в этом приложении требуется использовать функции, определенные в другом файле, например, tools.js .

Пример ситуации

В файле tools.js есть следующая функция:

// tools.js function sayHello(name) < console.log(`Hello, $!`); >

И хотелось бы использовать эту функцию в файле app.js :

// app.js var name = 'World'; // .

Основное решение

Наиболее общепринятым подходом в Node.js является превращение файла с функциями в модуль, который затем можно подключить с помощью функции require . В данном случае, чтобы сделать функцию sayHello доступной для других файлов, в файле tools.js необходимо добавить следующую строку:

module.exports.sayHello = sayHello;

Теперь в файле app.js можно подключить tools.js и использовать функцию sayHello :

var tools = require('./tools'); var name = 'World'; tools.sayHello(name);

Этот код выполнит функцию sayHello из файла tools.js и выведет «Hello, World!».

Альтернативное решение

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

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

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

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