Best Practices zum Erstellen einer Website mit Node.js.

79

Ich habe mich gefragt, wie man mit Node.js eine Website von Grund auf neu entwickeln soll. Ich verstehe, wie ich es möglicherweise tun könnte, aber ich interessiere mich für die beste Designpraxis.

Ich brauche diese theoretische Website, um:

  1. Mach viel AJAX
  2. Sei sehr unkompliziert
  3. Sei relativ klein
  4. Stellen Sie eine Verbindung zu ... sagen wir einem MySQL-Server her

In PHP war das Erstellen einer ziemlich kleinen Website sehr einfach - ich habe PHP auf Apache und einem MySQL-Server eingerichtet und dann Folgendes ausgeführt:

  • includes/db/ Das hat connect.php für die Verbindung mit der Datenbank, eine Datei mit allgemeinen db-bezogenen Funktionen und so weiter
  • includes/layout/ die Sachen wie footer.php, header.php und andere layoutbezogene Sachen hatten
  • includes/users/ benutzerbezogene Aktionen zu handhaben

Dann können Sie mit PHP einfach Seiten erstellen und diese Dateien zu einer Website zusammenfügen - ich könnte so etwas wie:

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

Ich habe mich gefragt, was in Node.js ähnlich sein könnte - ich suche nach einem Weg, dies zu erreichen, der so einfach , schnell und unkompliziert wie möglich ist.

Wenn die Antwort nicht einfach ist, würde ich eine Buchempfehlung lieben, es macht mir nichts aus zu lesen.

Ich liebe ereignisbasierte Programmierung, ich liebe die Fähigkeiten von JavaScript und ich freue mich sehr über Node.js. Ich möchte von Anfang an lernen, wie man solche Dinge richtig entwickelt.

Benjamin Gruenbaum
quelle
3
Ich möchte auch darauf hinweisen, dass es sehr wichtig ist, Ihren Code beispielsweise mit Mokka -> github.com/visionmedia/mocha zu testen . Erstellen Sie kleinen, gut getesteten modularen Code (Module).
Alfred
Sie können sich auch Erlang ansehen, das standardmäßig Parallelität unterstützt, schneller als node.js und einfacher als C oder Java ist.

Antworten:

184

Um mit den schlechten Nachrichten zu beginnen: Da Node.js eine ziemlich junge Technik ist, werden Sie feststellen, dass die Prozesse zum Erstellen einer vollwertigen Website und zum Verwalten / Betreiben dieser Website sehr unterschiedlich sein werden, als Sie es derzeit gewohnt sind.

Josh3736 fügt hinzu: Nachdem Sie herausgefunden haben, wie Node.js und seine verschiedenen Pakete (Connect, Express) funktionieren, habe ich festgestellt, dass Sie sehr schnell neue Websites entwickeln können.

Die derzeit in Node.js vorhandenen Ecken und Kanten in Kombination mit dem schnellen Entwicklungstempo und allen beteiligten Modulen können die Dinge jedoch komplizieren und die Dinge weniger einfach, schnell und unkompliziert machen, als Sie möchten.

Nachdem wir das aus dem Weg geräumt haben, sind hier die guten Nachrichten:

Der Node Package Manager, NPM, verfügt über viele gute Tools und Frameworks, um die Bare-Bones-Funktionalität von Node.js zu erweitern und einen Webserver zu erstellen.

Am bemerkenswertesten wäre das Express Framework, das fast alles enthält, was Sie zum Ausführen eines Webservers benötigen (einschließlich Cookies, Sitzungen und Pfadrouting). Zusätzlich unterstützt Express Partials, die sich um Ihre Kopf- und Fußzeilen kümmern.

Express basiert auf Senchas Connect . Cookies und Sitzungen werden tatsächlich von Connect bereitgestellt. Express vereinfacht Ihr Routing und verarbeitet Ansichten / Partials. Wenn Sie also nicht alle Schnickschnack benötigen, die mit Express geliefert werden, können Sie stattdessen einfach Connect wählen.

Wenn Sie Vorlagen für diese Partials verwenden möchten, kann die Jade Template Engine die Dinge für Sie beschleunigen. Obwohl Josh3736 darauf hinweist, dass Jade langsam und weiß ist. Eine vollständigere Übersicht finden Sie hier , einschließlich seines Favoriten doT . (Ich persönlich verwende Node.js nur für socket.iobasierte Anwendungen, daher ist er eine bessere Quelle als ich, wenn es um Vorlagen geht.)

Sie können mit dem Modul db-mysql von Node.js aus eine Verbindung zu MySQL herstellen. Wenn Sie dies jedoch nicht benötigen, weil Sie auf Daten zugreifen, die mit einem bereits vorhandenen System verbunden sind, würde ich die Verwendung eines moderneren Systems empfehlen 'Ansatz, der darin besteht, eine NoSQL- Datenbank zu verwenden, wie es die meisten Node.js-Projekte zu tun scheinen. MongoDB über Mongoose ist der beliebte Weg.

Oder wenn es nur Objekte speichert, an denen Sie interessiert sind, wählen Sie stattdessen Redis (das Sie wahrscheinlich sowieso irgendwann brauchen werden).

Sobald Ihre Website fertig ist, müssen Sie sie bereitstellen und sicherstellen, dass sie weiterhin ausgeführt wird. Es gibt viele Möglichkeiten, dies zu tun, z. B. die integrierte Clusterunterstützung oder das funktionsfreundlichere forevernpm-Modul. Weitere Informationen finden Sie in meiner SO-Frage.

Fazit :

Was ich versuche zu erreichen, ist Folgendes:

Die Frage, was die beste Vorgehensweise zum Erstellen einer Website in Node.js ist, entspricht in etwa der Frage, wie eine Website in PHP am besten erstellt werden kann: 100 Entwickler geben Ihnen 100 verschiedene Antworten.

NPM ist mit einer Vielzahl hervorragender Frameworks gesegnet, die viele Aufgaben erheblich vereinfachen, aber alles hängt von den Vorlieben ab, welche der richtige Weg sind.

Wie ich bereits sagte, ist Node.js noch eine ziemlich junge Technik, daher hat sich noch keines der Frameworks oder zusätzlichen Tools als "Defacto-Standard" herausgestellt. Für die meisten Dinge, die Sie versuchen, gibt es wahrscheinlich verschiedene Alternativen. Erwarten Sie, dass Ihr Code beschädigt wird, wenn Sie die meisten davon während der Aktualisierungen verwenden, da die Entwicklung von Node.js selbst und den meisten Modulen schnell vonstatten geht. Du musst mithalten.

Alles zusammen :

Wie ich bereits sagte, besteht meine Hauptproduktionsanwendung für Node.js darin, in der Lage zu sein, sie zu verwenden socket.io, sodass ich keine guten Produktionsbeispiele habe (und da ich kurz davor bin, in einen wohlverdienten Urlaub zu fahren, mache ich das nicht). Ich habe auch nicht die Zeit, eine zusammenzustellen. Es gibt jedoch einige gute Beispiele:

Auch hier hängt der Weg (und anschließend das folgende Beispiel) stark von Ihren endgültigen Zielen und den gewählten Techniken ab, aber zum Glück stehen für alle verfügbaren Optionen zahlreiche Ressourcen zur Verfügung. Die meisten Module verwenden gut dokumentierte GitHub-Repositorys und enthalten Beispiele in Kombination mit den beliebtesten Modulen (siehe das /examples/Verzeichnis, das in den meisten Repositorys vorhanden zu sein scheint).

Viel Glück! (Und danke an Josh3736 für die Behebung meiner Fehler.)

Rem.co.
quelle
2
Vielen Dank, genau das, wonach ich gesucht habe! Nur noch eine kurze Sache, ich frage mich, wie ein Code, der dem im Titel beschriebenen Code ähnelt, in node.js aussehen könnte. Wie würde die logische Trennung funktionieren? Angenommen, ich verwende Express und Jade mit railyway.js. Ich habe immer noch Schwierigkeiten zu verstehen, wie mein Programm aussehen würde. Wenn ich für (ein einfaches) Beispiel eine index.php-Datei habe, die Basisdaten aus der Datenbank lädt und anzeigt und Fuß- / Kopfzeilen enthält, wie würde diese Art von Code (optimal) aussehen? Nochmals vielen Dank
Benjamin Gruenbaum
6
Dies ist eine gute Antwort, aber ein paar Punkte: Express basiert tatsächlich auf Connect. Cookies und Sitzungen werden tatsächlich von Connect bereitgestellt. Express vereinfacht Ihr Routing und verarbeitet Ansichten / Partials. Jade ist extrem langsam und (persönlich gesehen) ich hasse Leerzeichen-Sprachen. Schauen Sie sich einige der anderen Templating-Engines an - mein Favorit ist doT, das schnell ist .
Josh3736
4
Schließlich würde ich nicht sagen, dass die Verwendung von Node "alles andere als einfach, schnell und unkompliziert" ist - es ist nur ganz anders als das, was Sie derzeit gewohnt sind. Nachdem Sie herausgefunden haben, wie Node und seine verschiedenen Pakete (Connect, Express) funktionieren, habe ich festgestellt, dass Sie sehr schnell neue Websites entwickeln können . Ja, es gibt immer noch Ecken und Kanten, aber im Großen und Ganzen können Sie Dinge einfach und schnell erledigen.
Josh3736
2
Remco, ich würde auch gerne auf meinen letzten Kommentar verweisen. Wenn Sie erklären, wie ich den besagten using-Knoten implementieren würde (unter Verwendung guter, wenn auch nicht bester Praktiken), werde ich diese Antwort markieren. Dies ist das letzte bisschen, das mich nervt und ich kämpfe wieder mit dieser letzten Etappe, danke.
Benjamin Gruenbaum
3
Ich habe dieses End-to-End-Beispiel für die Erstellung einer Full-Stack-Website mit dem MEAN-Stack (MongoDb, Express, Angular & Node) zusammengestellt. Sie können Angular oder den Client durch das ersetzen, mit dem Sie vertraut sind. Mir wurde gesagt, dass dies das beste Intro-Video auf dem Markt ist. Vielleicht hilft es anderen beim Einstieg. Youtube.com/watch?v=AEE7DY2AYvI
Michael Moser