Лучшие практики создания веб-сайтов с использованием Node.js

79

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

Мне нужен этот теоретический сайт, чтобы:

  1. Много используйте AJAX
  2. Будьте очень откровенны
  3. Быть относительно маленьким
  4. Подключитесь к ... скажем, серверу MySQL

В PHP создание довольно небольшого веб-сайта было очень простым - я установил PHP на Apache и сервер MySQL, а затем сделал что-то вроде:

  • includes/db/ в котором есть connect.php для подключения к базе данных, файл с общими функциями, связанными с базой данных, и т. д.
  • includes/layout/ в котором были такие вещи, как footer.php, header.php и другие вещи, связанные с макетом
  • includes/users/ для обработки действий, связанных с пользователем

Затем PHP просто позволяет вам создавать страницы и включать эти файлы вместе для создания веб-сайта - я мог бы сделать что-то вроде:

<?php
   require_once('inclues/users/user_session.php');
   require_once('inclues/db/connect.php');
   require_once('inclues/design/header.php')
?>

// Other php or html or related content relating to the page

<?php
   require_once('inclues/.../footer.php');
?>

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

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

Мне нравится программирование на основе событий, мне очень нравятся возможности JavaScript, и мне очень нравится Node.js. Я хочу научиться правильно развивать подобные вещи с самого начала.

Бенджамин Грюнбаум
источник
3
Также хочу отметить, что очень важно протестировать ваш код, например, используя mocha -> github.com/visionmedia/mocha . Создайте небольшой хорошо протестированный модульный код (модули).
Alfred
Вы также можете взглянуть на Erlang, который по умолчанию поддерживает параллелизм, быстрее, чем node.js, и проще, чем, скажем, C или Java.

Ответы:

184

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

Джош3736 добавляет: « Как только вы выясните, как работают Node.js и его различные пакеты (Connect, Express), я обнаружил, что вы можете очень быстро разрабатывать новые сайты.

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

Имея это в виду, вот хорошие новости:

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

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

Express построен на основе Sencha Connect . Файлы cookie и сеансы фактически поддерживаются Connect. Express - это то, что упрощает вашу маршрутизацию и обрабатывает представления / частичные данные. Поэтому, если вам не нужны все навороты, которые поставляются с Express, вы можете вместо этого просто перейти на Connect.

Если вам нравится использовать шаблоны для этих частичных файлов, Jade Template Engine может ускорить процесс. Хотя Джош3736 указывает на то, что Джейд медлителен и имеет большое количество пробелов. Более полный обзор можно найти здесь , в том числе его любимого, doT . (Я лично использую Node.js только для базовых socket.ioприложений, поэтому он лучший источник, чем я, когда дело доходит до создания шаблонов).

Вы можете подключиться к MySQL из Node.js с помощью модуля db-mysql , но если вам это не нужно, потому что вы обращаетесь к данным, подключенным к уже существующей системе, я бы посоветовал использовать более ... ', который заключается в использовании базы данных NoSQL, как, похоже, делает большинство проектов Node.js. MongoDB через Mongoose - популярный способ.

Или, если он просто хранит объекты, которые вас интересуют, просто перейдите на Redis (который, вероятно, вам в какой-то момент понадобится).

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

Вывод :

Я пытаюсь понять следующее:

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

NPM наделен множеством отличных фреймворков, которые значительно упрощают множество задач, но все зависит от предпочтений, какой из них действительно подходит.

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

Собираем все вместе :

Как я уже сказал, мое основное производственное использование Node.js - это возможность его использовать socket.io, поэтому у меня нет хороших производственных примеров (и, поскольку я собираюсь уехать в заслуженный отпуск, я не У меня тоже есть время собрать одну). Однако есть несколько хороших примеров:

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

Удачи! (И спасибо Josh3736 за исправление моих ошибок.)

Rem.co
источник
2
Большое спасибо, именно то, что я искал! Еще одна короткая вещь. Мне интересно, как код, похожий на код, который я описал в заголовке, может выглядеть в node.js? Как будет работать логическое разделение? Допустим, я использую express и jade с railyway.js. Я все еще пытаюсь понять, как будет выглядеть моя программа. Если для (простого) примера у меня есть файл index.php, который загружает и отображает базовые данные из базы данных и включает файлы нижнего колонтитула / заголовка, как бы такой код выглядел (оптимально)? Опять же, большое спасибо
Бенджамин Грюнбаум
6
Это хороший ответ, но несколько моментов: на самом деле Express построен на основе Connect. Файлы cookie и сеансы фактически поддерживаются Connect. Express - это то, что упрощает вашу маршрутизацию и обрабатывает представления / частичные данные. Jade работает очень медленно, и я ненавижу языки, в которых используются пробелы. Взгляните на некоторые другие движки шаблонов - мой любимый - doT, он быстрый .
josh3736
4
Наконец, я бы не сказал, что использование Node - это «все, кроме простого, быстрого и понятного» - это просто сильно отличается от того, к чему вы сейчас привыкли. Как только вы выясните, как работают Node и его различные пакеты (Connect, Express), я обнаружил, что вы можете очень быстро разрабатывать новые сайты . Да, есть еще острые углы, но в целом все можно делать просто и быстро.
josh3736
2
Ремко, мне также хотелось бы сослаться на мой последний комментарий, если вы объясните, как я буду реализовывать указанный узел using (используя хорошую, даже если не лучшую, практику), я отмечу этот ответ. Это последнее, что меня беспокоит, и я снова борюсь с этим последним этапом, спасибо.
Бенджамин Грюнбаум
3
Я собрал этот сквозной пример того, как создать веб-сайт с полным стеком, используя стек MEAN (MongoDb, Express, Angular и Node). Вы можете заменить Angular или клиент на то, что вам знакомо. Мне сказали, что это лучшее вступительное видео на свете, так что, возможно, оно поможет другим начать работу youtube.com/watch?v=AEE7DY2AYvI
Майкл Мозер