Найкращі практики створення веб-сайту за допомогою Node.js


79

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

Мені потрібен цей теоретичний веб-сайт, щоб:

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

У PHP створення досить маленького веб-сайту було дуже простим - я встановив PHP на Apache та сервері MySQL, а потім зробив щось на зразок:

  • includes/db/ який має connect.php для підключення до db, файл із загальними функціями, пов’язаними з db тощо
  • 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 . Створіть невеликий добре перевірений модульний код (модулі).
Альфред

Ви також можете поглянути на Erlang, який за замовчуванням підтримує паралельність, швидший, ніж node.js, і простіший, ніж скажімо C або Java.

Відповіді:


184

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

Josh3736 додає: Як тільки ви з’ясуєте , як працює Node.js та різні його пакети (Connect, Express), я виявив, що ви можете дуже швидко розробляти нові сайти.

Грубі краї, які зараз існують у Node.js, у поєднанні з швидкими темпами його розробки та всіх задіяних модулів можуть ускладнити ситуацію та зробити речі менш простими, швидкими та зрозумілими, ніж хотілося б.

Позбавивши цього, ось хороша новина:

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

Найбільш помітним буде Express Framework, який містить майже все, що потрібно для запуску веб-сервера (включаючи файли cookie, сеанси та маршрутизацію шляху). Крім того, Express підтримує часткові елементи, які піклуються про ваш верхній і нижній колонтитули.

Express побудований поверх Sencha's Connect . Файли cookie та сеанси фактично працюють від Connect. Express - це те, що спрощує вашу маршрутизацію та обробляє перегляди / частки. Тож якщо вам не потрібні всі навороти, що постачаються з Express, замість цього просто перейдіть до Connect.

Якщо ви хочете використовувати шаблони для цих частинок, Jade Template Engine може пришвидшити процес. Хоча Josh3736 зазначає, що Джейд повільний і пробільний. Більш повний огляд можна знайти тут , що включає його улюблений 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 за виправлення моїх помилок.)


2
Велике спасибі, саме те, що я шукав! Ще одна коротка річ, мені цікаво, як може виглядати в node.js код, подібний до коду, який я описав у заголовку? Як би працювало логічне розділення? Скажімо, я використовую express і jade з railyway.js. Я все ще намагаюся зрозуміти, як би виглядала моя програма. Якщо для (простого) прикладу у мене є файл index.php, який завантажує та відображає основні дані з бази даних та включає файли нижнього колонтитула / заголовка, як би виглядав такий тип коду (оптимально)? Ще раз велике спасибі
Бенджамін Груенбаум

6
Це хороша відповідь, але кілька моментів: Express насправді побудований поверх Connect. Файли cookie та сеанси фактично працюють від Connect. Express - це те, що спрощує вашу маршрутизацію та обробляє перегляди / частки. Джейд надзвичайно повільна, і (на особисту ноту) я ненавиджу проміжні мови. Погляньте на деякі інші шаблонні механізми - мій улюблений - doT, який є швидким .
josh3736

4
Нарешті, я б не сказав, що використання Node - це «все, крім простого, швидкого та простого» - воно просто сильно відрізняється від того, до чого ви звикли зараз. Як тільки ви з’ясуєте, як працюють Node та різні його пакети (Connect, Express), я виявив, що ви можете дуже швидко розробляти нові сайти . Так, ще є нерівні краї, але в цілому ви можете робити все просто і швидко.
josh3736

2
Ремко, я також хотів би згадати мій останній коментар, якщо ти поясниш, як би я реалізував згаданий вузол (використовуючи хорошу, навіть якщо не найкращу практику), я позначу цю відповідь. Це останній біт, який мене хвилює, і я борюся з цим останнім етапом, ще раз дякую.
Бенджамін Груенбаум

3
Я зібрав цей наскрізний приклад того, як зробити веб-сайт із повним стеком, використовуючи стек MEAN (MongoDb, Express, Angular & Node). Ви можете замінити Angular або клієнта тим, що вам знайоме. Мені сказали, що це найкраще вступне відео, тому, можливо, це допоможе іншим розпочати роботу youtube.com/watch?v=AEE7DY2AYvI
Майкл Мозер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.