Najlepsze praktyki tworzenia strony internetowej przy użyciu Node.js.

79

Zastanawiałem się, jak można by zaprojektować stronę internetową od podstaw za pomocą Node.js. Rozumiem, jak mogę ewentualnie zrobić, ale jestem zainteresowany w najlepszej praktyki projektowej.

Potrzebuję tej teoretycznej strony internetowej, aby:

  1. Wykonuj dużo AJAX
  2. Bądź bardzo bezpośredni
  3. Bądź stosunkowo mały
  4. Połącz się z ... powiedzmy serwerem MySQL

W PHP zbudowanie całkiem małej witryny było bardzo proste - założyłem PHP na Apache i serwerze MySQL, a potem robię coś takiego:

  • includes/db/ który ma connect.php do łączenia się z bazą danych, plik z typowymi funkcjami związanymi z bazą danych i tak dalej
  • includes/layout/ który zawierał takie rzeczy jak footer.php, header.php i inne rzeczy związane z układem
  • includes/users/ do obsługi działań związanych z użytkownikami

Następnie PHP po prostu pozwoli ci zbudować strony i dołączyć te pliki razem, aby utworzyć witrynę internetową - mógłbym zrobić coś takiego:

<?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');
?>

Zastanawiałem się, co może być podobne w Node.js - szukam sposobu na osiągnięcie tego, który jest tak prosty , szybki i prosty, jak to tylko możliwe.

Jeśli odpowiedź nie jest prosta, chciałbym polecić książkę, nie mam nic przeciwko czytaniu.

Uwielbiam programowanie oparte na zdarzeniach, naprawdę uwielbiam możliwości JavaScript i jestem naprawdę podekscytowany Node.js. Chcę się nauczyć, jak od samego początku rozwijać tego typu rzeczy we właściwy sposób.

Benjamin Gruenbaum
źródło
3
Chciałbym również zaznaczyć, że bardzo ważne jest, aby przetestować swój kod za pomocą np . Mocha -> github.com/visionmedia/mocha . Utwórz mały, dobrze przetestowany kod modułowy (moduły).
Alfred,
Możesz również przyjrzeć się Erlangowi, który domyślnie obsługuje współbieżność, jest szybszy niż node.js i łatwiejszy niż powiedzmy C lub Java.

Odpowiedzi:

184

Na początek złe wieści: jako Node.js jest dość młodą techniką, myślę, że zauważysz, że proces tworzenia pełnoprawnej strony internetowej i jej utrzymywania / obsługi będzie bardzo różny od tego, do czego jesteś przyzwyczajony.

Josh3736 dodaje: Kiedy już dowiesz się, jak działa Node.js i jego różne pakiety (Connect, Express), stwierdziłem, że możesz bardzo szybko tworzyć nowe witryny.

Chropowate krawędzie, które obecnie istnieją w Node.js, w połączeniu z szybkim tempem jego rozwoju i wszystkimi zaangażowanymi modułami, mogą jednak komplikować sprawę i sprawić, że wszystko będzie mniej proste, szybkie i proste, niż byś chciał.

Mając to na uboczu, oto dobra wiadomość:

Pakiet Node Manager NPM ma wiele dobrych narzędzi i ram do rozszerzenia funkcjonalności node.js za gołe kości, dzięki czemu nadaje się do tworzenia serwera WWW.

Przede wszystkim byłby to Express Framework który zawiera prawie wszystko, czego potrzebujesz do uruchomienia serwera internetowego (w tym pliki cookie, sesje i routing ścieżek). Dodatkowo Express obsługuje podszewki, które dbają o zawartość nagłówka i stopki.

Express jest zbudowany na bazie Connect Sencha . Pliki cookie i sesje są w rzeczywistości obsługiwane przez Connect. Express upraszcza trasowanie i obsługuje widoki / częściowe. Więc jeśli nie potrzebujesz wszystkich dzwonków i gwizdków, które są dostarczane z Expressem, możesz zamiast tego wybrać Connect.

Jeśli lubisz używać szablonów dla tych podszablonów, Jade Template Engine może przyspieszyć działanie. Chociaż Josh3736 wskazuje, że Jade jest powolny i znaczący białymi znakami . Bardziej szczegółowy przegląd można znaleźć tutaj , w tym jego ulubiony doT . (Osobiście używam Node.js tylko do socket.ioaplikacji opartych na bazie, więc jest lepszym źródłem niż ja, jeśli chodzi o tworzenie szablonów).

Państwo może połączyć się z MySQL od node.js pomocą db-mysql moduł, ale jeśli nie musisz, bo masz dostęp do danych podłączonych do już istniejącego systemu, radzę użyć bardziej ... „nowoczesny 'podejście, które polega na wykorzystaniu bazy danych NoSQL, tak jak wydaje się to robić w większości projektów Node.js. MongoDB przez Mongoose to popularna metoda.

A jeśli chodzi tylko o przechowywanie interesujących Cię obiektów, po prostu wybierz Redis (co prawdopodobnie i tak będzie Ci potrzebne).

Po ukończeniu witryny musisz ją wdrożyć i upewnić się, że działa. Można to zrobić na wiele sposobów, na przykład przy użyciu wbudowanej obsługi klastrów lub bardziej przyjaznego dla funkcji forevermodułu npm. Zobacz to moje pytanie SO po więcej informacji.

Wniosek :

Oto co próbuję osiągnąć:

Zapytanie, jaka jest najlepsza praktyka tworzenia strony internetowej w Node.js, jest mniej więcej tym samym, co pytanie, jaki jest najlepszy sposób na zbudowanie witryny w PHP: 100 programistów udzieli 100 różnych odpowiedzi.

NPM jest obdarzony wieloma doskonałymi strukturami, które znacznie upraszczają wiele związanych z nim zadań, ale wszystko opiera się na preferencjach, które z nich są właściwą drogą.

Jak powiedziałem, Node.js jest wciąż dość młodą techniką, więc żaden z frameworków ani dodatkowych narzędzi nie pojawił się jeszcze jako „standard defacto”; dla większości rzeczy, które próbujesz zrobić, są prawdopodobnie różne alternatywy i spodziewaj się, że Twój kod zepsuje się, gdy używasz większości z nich podczas aktualizacji, ponieważ rozwój samego Node.js i większości modułów przebiega szybko. Będziesz musiał nadążyć.

Łącząc to wszystko razem :

Jak już powiedziałem, moim głównym zastosowaniem Node.js jest możliwość korzystania z niego socket.io, więc nie mam żadnych dobrych przykładów produkcji (A ponieważ mam zamiar wyjechać na zasłużone wakacje, nie nie mam też czasu na złożenie jednego). Jest jednak kilka dobrych przykładów:

Ponownie, droga (a następnie przykład do naśladowania) zależy w dużej mierze od twoich ostatecznych celów i wybranych technik, ale na szczęście dostępnych jest wiele zasobów dla wszystkich dostępnych opcji. Większość modułów korzysta z dobrze udokumentowanych repozytoriów GitHub i zawiera przykłady w połączeniu z najpopularniejszymi modułami (zobacz /examples/katalog, który wydaje się być obecny w większości repozytoriów).

Powodzenia! (I dziękuję Josh3736 za poprawienie moich błędów.)

Rem.co
źródło
2
Wielkie dzięki, właśnie tego szukałem! Jeszcze jedna krótka rzecz, zastanawiam się, jak może wyglądać kod podobny do tego, który opisałem w tytule, w node.js? Jak działałaby separacja logiczna? Powiedzmy, że używam express i jade z railyway.js. Wciąż nie rozumiem, jak będzie wyglądał mój program. Jeśli dla (prostego) przykładu mam plik index.php, który ładuje i wyświetla podstawowe dane z bazy danych i zawiera pliki stopki / nagłówka, jak taki rodzaj kodu wyglądałby (optymalnie)? Jeszcze raz wielkie dzięki
Benjamin Gruenbaum
6
To dobra odpowiedź, ale kilka punktów: Express jest w rzeczywistości zbudowany na bazie Connect. Pliki cookie i sesje są w rzeczywistości obsługiwane przez Connect. Express upraszcza trasowanie i obsługuje widoki / częściowe. Jade jest bardzo powolny i (osobiście) nienawidzę języków, w których występują białe znaki. Spójrz na inne silniki szablonów - moim ulubionym jest doT, który jest szybki .
josh3736
4
Na koniec nie powiedziałbym, że używanie Node to „wszystko oprócz prostego, szybkiego i prostego” - jest po prostu zupełnie inne niż to, do czego jesteś przyzwyczajony. Kiedy już dowiesz się, jak działa Node i jego różne pakiety (Connect, Express), odkryłem, że możesz bardzo szybko tworzyć nowe witryny . Tak, nadal istnieją ostre krawędzie, ale ogólnie rzecz biorąc, możesz robić rzeczy prosto i szybko.
josh3736
2
Remco, chciałbym również nawiązać do mojego ostatniego komentarza, jeśli wyjaśnisz, jak zaimplementowałbym wspomniany węzeł (używając dobrej, nawet jeśli nie najlepszej praktyki), zaznaczę tę odpowiedź. To ostatni kawałek, który mnie niepokoi i znowu walczę z tym ostatnim etapem, dzięki.
Benjamin Gruenbaum
3
Złożyłem ten kompleksowy przykład, jak zrobić witrynę internetową z pełnym stosem przy użyciu stosu MEAN (MongoDb, Express, Angular & Node). Możesz zastąpić Angulara lub klienta tym, co znasz. Powiedziano mi, że jest to najlepszy film wprowadzający tam, więc być może to pomoże innym podręczny youtube.com/watch?v=AEE7DY2AYvI
Michael Moser