Sie sind ein PHP-Entwickler. Ich habe es verstanden. Ich auch. Meine Reise zu PHP verlief nicht auf dem üblichen Weg, den die meisten PHP-Entwickler auf ihrer Suche nach der perfekten Programmiersprache gehen. Ursprünglich habe ich als Java-Entwickler angefangen und ungefähr 10 Jahre in diesem Land gelebt. Ich war einer dieser eingefleischten Java-Entwickler, die, wenn PHP in ein Gespräch eingeführt wurde, Dinge wie Enterprise, Skalierbarkeit und anderen Unsinn von sich gaben.
Vor etwa 5 Jahren begann ich an einem Open-Source-Projekt zu arbeiten, das ein soziales Web-Frontend benötigte, und das Team musste eine Programmiersprache für die Website auswählen. Ich habe mich mit Java und den meisten anderen Sprachen beschäftigt, mich aber aus verschiedenen Gründen für PHP entschieden. Es fiel mir schwer, meinen Stolz zu überwinden und mit der Programmierung in PHP zu beginnen, aber was während dieses Projekts geschah, grenzte an ein Wunder. Ich verliebte mich in die Sprache und begann, sie für so viele Projekte zu verwenden, wie ich finden konnte, während ich meine Java-Wurzeln im Staub liegen ließ. PHP hat mir in den letzten 5 Jahren gute Dienste geleistet, aber ich war immer noch auf der Suche nach dem heiligen Gral einer Programmiersprache, in der man schnell entwickeln kann, die von Unternehmen unterstützt wird, die performant und skalierbar ist und gleichzeitig eine starke Gemeinschaft von Entwicklern bietet. Ich glaube, dass Node.js alle meine Anforderungen erfüllt und gleichzeitig eine schnell wachsende und sich weiterentwickelnde Sprache ist.
Das erste, was man verstehen muss, ist, dass Node.js nicht nur für Hipster-Entwickler oder Early Adopters ist. Es wird heute von einigen der meistbesuchten Websites im Internet verwendet und gewinnt immer mehr die Herzen und den Verstand der Entwickler. Es ist wirklich an einem Punkt angelangt, an dem man ihm selbst bei den kompliziertesten Systemen vertrauen kann.
Node.js ist JavaScript##
Wenn Sie denken, dass Sie eine ganz neue Sprache lernen müssen, um mit Node.js produktiv zu sein, liegen Sie wahrscheinlich falsch. Die meisten Entwickler sind bereits mit JavaScript vertraut und das ist die Sprache und Semantik, mit der Sie arbeiten werden, wenn Sie in Node.js programmieren. Ein kürzlich von Red Monk veröffentlichter Artikel, der versucht, Github-Projekte auszuwerten, um die beliebtesten Sprachen zu bestimmen, hat JavaScript als König ausgemacht. Die ersten drei Sprachen sind wie folgt:
- JavaScript
- Java
- PHP
Angesichts der Popularität von JavaScript und seiner weiten Verbreitung in unserer Branche ist es wahrscheinlich an der Zeit, sich hinzusetzen und es zu lernen, wenn Sie noch nicht damit vertraut sind.
Wenn Node.js nur JavaScript verwendet, was ist es dann genau?##
Zusammenfassend ist Node.js eine Plattform für serverseitige Aktivitäten. Sie verwendet die Programmiersprache Javascript und verfügt über eine Fülle von Bibliotheken, die als npm-Module verfügbar sind. Sie können sich diese npm-Module als Bibliotheksabhängigkeiten vorstellen, die mit Composer erfüllt werden können, wenn Sie aus dem PHP-Land kommen. Tatsächlich wurde das Standard-Abhängigkeitsverwaltungssystem für PHP (Composer) laut der offiziellen Website von Node.js inspiriert. Wenn Sie eine bestimmte Funktionalität benötigen und keine Lust haben, den gesamten Code selbst zu schreiben, steht Ihnen wahrscheinlich ein npm-Modul zur Verfügung, das die gewünschten Funktionen bereits bietet.
Node-Anwendungen werden normalerweise implementiert, wenn Sie die Effizienz durch die Verwendung von nicht blockierenden E/A und asynchronen Ereignissen maximieren müssen. Ein Problem, das PHP-Entwickler kennen sollten, ist, dass Node.js-Anwendungen in einem einzigen Thread laufen. Der Backend-Code von Node.js verwendet jedoch mehrere Threads für Operationen wie Netzwerk- und Dateizugriffe. Daher eignet sich Node perfekt für Anwendungen, die nahezu in Echtzeit ausgeführt werden sollen.
Einführung in Node.js anhand eines Beispielprojekts##
Im weiteren Verlauf dieses Blog-Beitrags werde ich Ihnen zeigen, wie Sie sich mit Node.js vertraut machen können, wenn Sie einen PHP-Hintergrund haben. Die Beispielanwendung, die wir schreiben werden, ist ein einfacher Backend-Service, der die Standorte aller Walmart-Filialen liefert. Ich habe Walmart für dieses Beispiel gewählt, weil es ganz einfach der heilige Gral aller Kaufhäuser ist. Wenn Walmart es nicht hat, brauchen Sie es nicht.
Am Ende dieses Blogbeitrags werden Sie sehen, wie schnell und einfach es ist, eine REST-basierte API mit Node.js zu erstellen, die auf der beliebten Datenbank MongoDB basiert. Ich habe dieses REST-basierte Beispiel gewählt, weil die Erstellung einer Backend-API schnell zu einem häufigen Anwendungsfall in den meisten modernen Anwendungen geworden ist.
Ursprünglich hatte ich geplant, dieselbe Anwendung sowohl in PHP als auch in Node.js zu erstellen, um Ihnen den Übergang zu erleichtern, aber um all die verschiedenen Frameworks und Möglichkeiten zur Erstellung von REST-basierten Diensten in PHP abzudecken, würde dies ein ganzes Buch rechtfertigen und kann einfach nicht in einem einzigen Blogbeitrag behandelt werden. Ich habe dann darüber nachgedacht, einfach das Laravel-Framework zu verwenden, da es sich immer größerer Beliebtheit erfreut. Damit würde ich aber immer noch nur ein Viertel der PHP-Entwickler erreichen. Mein persönliches Lieblingsframework ist CodeIgniter, aber es verliert schnell an Boden und repräsentiert nur noch weniger als 8 % der PHP-Entwicklerpopulation. Sitepoint hat vor kurzem einen Artikel veröffentlicht, in dem genau dies diskutiert wird, und bietet das folgende Diagramm, das die vielversprechendsten Frameworks für 2014 zeigt.
Angesichts der großen Unterschiede bei der Konfiguration von Datenbankverbindungen und der Erstellung von REST-Diensten für jedes Framework gehe ich davon aus, dass Sie wissen, wie Sie dies für Ihr Framework in PHP tun können, und werde mich stattdessen nur auf den Node.js-Code konzentrieren.
Erstellung unserer Node.js-Anwendung##
Im weiteren Verlauf dieses Beitrags werden wir die Walmart Locator-Anwendung mit dem LoopBack API-Framework von StrongLoop erstellen. Als zusätzlichen Bonus werde ich Sie durch die Installation von Node.js unter OSX führen. Schnappen Sie sich also eine Tasse Kaffee, lehnen Sie sich zurück, entspannen Sie sich und lassen Sie uns an die Arbeit gehen.
Schritt 1: Installation von Node.js##
Der einfachste Weg, Node.js zu installieren, ist über eines der verfügbaren Binärpakete, die für die meisten Betriebssysteme verfügbar sind. Rufen Sie mit Ihrem Browser die folgende URL auf und laden Sie das richtige Paket für Ihr Betriebssystem herunter:
http://nodejs.org/download/
Wenn diese Seite geladen ist, sollten Sie folgendes sehen:
Wenn Sie Mac OSX verwenden, klicken Sie auf die universelle .pkg-Datei. Dadurch wird das Installationsprogramm auf Ihrem lokalen Computer gespeichert. Sobald die Datei heruntergeladen wurde, starten Sie das Installationsprogramm, indem Sie auf die heruntergeladene .pkg-Datei doppelklicken. Daraufhin wird der Installationsdialog angezeigt:
Schließen Sie den Installationsprozess ab, indem Sie alle Standardeinstellungen verwenden, und klicken Sie schließlich auf die Schaltfläche „Schließen“, um das Programm nach erfolgreicher Installation zu beenden. Ziemlich einfach, nicht wahr?
Schritt 2: Installation von LoopBack mit NPM
Nun, da wir Node.js auf unserem lokalen System installiert haben, wollen wir die LoopBack-Pakete installieren, die von StrongLoop bereitgestellt werden. LoopBack ist ein Open-Source-API-Framework, das Funktionen bereitstellt, die Ihnen das Leben leichter machen, wenn Sie lernen, wie man in Node.js geschriebene Software schreibt und einsetzt.
Um LoopBack zu installieren, verwenden wir den Befehl npm, der Teil der Node.js-Kerndistribution ist. NPM ist der offizielle Paketmanager für die Installation von Bibliotheken oder Modulen, auf die Ihre Anwendungen angewiesen sind. Da dieser Beitrag für PHP-Entwickler geschrieben wurde, kann man NPM-Module leicht mit Composer in Verbindung bringen. Mithilfe des Composer-Abhängigkeitssystems können Entwickler Abhängigkeiten in ihrer composer.json-Datei angeben. Sobald die Pakete in der composer.json-Datei definiert sind, muss ein PHP-Entwickler lediglich den Installationsbefehl eingeben, der in etwa wie folgt aussehen sollte:
$ php composer.phar install
NPM-Module funktionieren auf die gleiche Weise und verwenden die package.json-Datei, um Abhängigkeiten für eine bestimmte Anwendung anzugeben. Sie können Abhängigkeiten auch über die Befehlszeile installieren, um sie auf Ihrem lokalen System verfügbar zu machen. Machen Sie sich keine Sorgen, wenn Sie das noch nicht verstehen, denn wir werden die Datei package.json in einem späteren Schritt ausführlicher behandeln.
Um LoopBack zu installieren, können wir einen einzigen Befehl eingeben, der alle Abhängigkeiten, die wir für das Paket benötigen, herunterlädt und installiert. Öffnen Sie Ihr Terminal-Fenster und geben Sie den folgenden Befehl ein:
$ npm install -g strongloop
Hinweis: Je nach Ihrer Installation müssen Sie möglicherweise sudo verwenden
Was ist gerade passiert? Wir haben npm mitgeteilt, dass wir das strongloop-Paket installieren wollen und gleichzeitig die Option -g
angegeben. Die Option -g
macht das Paket als globales Paket für jeden auf dem System verfügbar und ist für alle Anwendungen verfügbar. Sobald Sie den oben genannten Befehl ausführen, lädt NPM das Paket sowie alle erforderlichen Abhängigkeiten herunter. Je nach Geschwindigkeit Ihres Systems kann dieser Vorgang einige Minuten dauern.
Schritt 3: Erstellen unserer Anwendung##
Das Erstellen einer Anwendung mit der LoopBack-API ist sehr einfach und unkompliziert. Öffnen Sie einfach Ihr Terminalfenster und geben Sie den folgenden Befehl ein, um eine neue Anwendung mit dem Namen locatewalmart
zu erstellen.
$ slc loopback _-----_ | | .--------------------------. |--(o)--| | Let's create a LoopBack | `---------´ | application! | ( _´U`_ ) '--------------------------' /___A___\ | ~ | __'.___.'__ ´ ` |° ´ Y ` Enter a directory name where to create the project: locatewalmart create locatewalmart/ info change the working directory to locatewalmart
Das Dienstprogramm slc
wird nun ein neues LoopBack-basiertes Projekt mit dem Namen locatewalmart
erstellen und das Projekt konfigurieren. Wenn wir nach dem Anwendungsnamen gefragt werden, können wir den Standardnamen beibehalten.
What's the name of your application? locatewalmart
Nach dem Ausführen des obigen Befehls wird ein neues Verzeichnis für Ihr Projekt für Ihre Anwendung erstellt. Wechseln Sie mit dem cd-Befehl in das Anwendungsverzeichnis:
$ cd locatewalmart
Nachdem wir nun unsere Anwendung erstellt haben, wollen wir Unterstützung für MongoDB als Datenquelle für Loopback hinzufügen.
Schritt 4: Definieren unserer Datenquelle##
Um mit MongoDB kommunizieren zu können, müssen wir unserer Anwendung eine Datenquelle hinzufügen. Dazu führen wir aus:
$ slc loopback:datasource mymongo Enter the data-source name: mymongo Select the connector for mymongo:PostgreSQL (supported by StrongLoop)Oracle (supported by StrongLoop)Microsoft SQL (supported by StrongLoop)❯ MongoDB (supported by StrongLoop)SOAP webservices (supported by StrongLoop)REST services (supported by StrongLoop)Neo4j (provided by community)(Move up and down to reveal more choices)
Schritt 5: Auf die echte Datenquelle zeigen##
Um mit MongoDB zu kommunizieren, müssen wir die Datenquelle auf die tatsächliche MongoDB-Instanz zeigen. LoopBack definiert alle Datenquellenkonfigurationen in der Datei datasource.json
, die sich im Verzeichnis root/server
Ihrer Anwendung befindet. Öffnen Sie diese Datei und fügen Sie eine Datenquelle für MongoDB wie im folgenden Code gezeigt hinzu:
{ "db": { "name": "db", "connector": "memory" }, "mymongo": { "name": "mymongo", "connector": "mongodb" "url": "mongodb://localhost:27017/locatewalmart" }}
Hinweis: Stellen Sie sicher, dass Sie die richtige Verbindungs-URL für Ihre MongoDB-Datenbank angeben. Für dieses Beispiel habe ich eine lokal erstellte Datenbank mit dem Namen locatewalmart, die ich als Datenquelle verwenden möchte.
Nachdem wir nun unsere Datenbank definiert haben, müssen wir noch ein paar zusätzliche Dinge tun. Zunächst müssen wir angeben, dass unsere Anwendungen von dem Paket loopback-connector-mongodb
abhängen. Um eine Abhängigkeit festzulegen, ändern Sie die Datei package.json, was der Bearbeitung der Datei composer.json
in PHP ähnelt. Öffnen Sie die Datei package.json
, die sich im Stammverzeichnis Ihrer Anwendung befindet, und fügen Sie loopback-connector-mongodb
in den Abschnitt für Abhängigkeiten ein. Danach können Sie npm install ausführen.
Alternativ können Sie auch einfach Folgendes ausführen:
$ npm install loopback-connector-mongodb --save
Dadurch wird die package.json
automatisch aktualisiert. Der Abschnitt sollte wie folgt aussehen:
"dependencies": { "compression": "^1.0.3", "errorhandler": "^1.1.1", "loopback": "^2.0.0", "loopback-boot": "^2.0.0", "loopback-connector-mongodb": "^1.4.1", "loopback-datasource-juggler": "^2.0.0", "serve-favicon": "^2.0.1" }
Schritt 6: Importieren von Daten in MongoDB##
Nun, da wir unsere Datenquelle konfiguriert haben, müssen wir den Datensatz in unsere MongoDB-Datenbank laden.
Das erste, was wir tun möchten, ist das Herunterladen einer JSON-Datei, die alle Daten enthält, die wir zurückgeben möchten. Sie können diese unter der folgenden URL abrufen:
https://dl.dropboxusercontent.com/u/72466829/walmart.json
Wenn Sie den Datensatz heruntergeladen haben, importieren Sie ihn einfach mit dem Befehl mongoimport in Ihre Datenbank, wie unten gezeigt:
$ mongoimport --jsonArray -d locatewalmart -c store --type json --file walmart.json -h yourMongoHost --port yourMongoPort -u yourMongoUsername -p yourMongoPassword
Sie sollten die folgenden Ergebnisse sehen:
connected to: 127.0.0.12014-08-17T13:07:26.301-0400 check 9 31762014-08-17T13:07:26.305-0400 imported 3176 objects
Schritt 7: Erstellen unseres Store-Modells##
Ein Modell kann mit den gleichen Begriffen betrachtet werden, die man in PHP-Land über Modelle denkt, wenn man ein MVC-Framework verwendet. Es ist eine Darstellung eines Objekts, das in diesem Fall ein Walmart-Laden ist. LoopBack bietet eine bequeme Möglichkeit, Modellobjekte über die Kommandozeile zu erstellen. Öffnen Sie Ihr Terminal-Fenster, wechseln Sie in den Projektordner und geben Sie folgenden Befehl ein:
$ slc loopback:model
Damit wird eine interaktive Sitzung gestartet, in der Sie Ihr Modell definieren können. Als erstes werden Sie nach der Datenquelle gefragt, mit der Sie das Modell verknüpfen wollen. Wir wählen die Datenquelle mymongo, die wir gerade erstellt haben. Als nächstes wird nach dem Pluralnamen für das Modell gefragt. Wir verwenden den Standard (Stores) und drücken die Eingabetaste.
Enter the model name: store Select the data-source to attach store to:db (memory)❯ mymongo (mongodb) Expose store via the REST API? Yes Custom plural form (used to build REST URL):
Nachdem Sie die Eingabetaste gedrückt haben, werden Sie aufgefordert, die Eigenschaften des Store Models anzugeben. Sie können sich das wie var(s) vorstellen, die Sie für eine Klasse in PHP definieren.
Enter an empty property name when done. Property name:
Die Eigenschaften, die wir hinzufügen wollen, sind der Typ des Geschäfts, das Öffnungsdatum, der Breitengrad und der Längengrad.
Property name: opendate invoke loopback:property
Nachdem Sie die Eingabetaste gedrückt haben, werden Sie aufgefordert, den Datentyp für jede angegebene Eigenschaft anzugeben. Das erste Element ist opendate, und wir wollen auswählen, dass es vom Typ Datum ist. Wählen Sie Datum und drücken Sie die Eingabetaste.
Property type: string number boolean object array❯ date buffer geopoint (other)
Dann werden Sie gefragt, ob diese Eigenschaft für die Schemavalidierung erforderlich ist. Wir geben „ja“ ein.
Required? (y/N) : y
Sie werden dann nach dem Datentyp für jede verbleibende Eigenschaft gefragt. Geben Sie folgende Antworten:
Property name: type_store invoke loopback:property Property type: (Use arrow keys)❯ string number boolean object array date buffer geopoint (other) Required? (y/N) : yLet's add another store property.Enter an empty property name when done. Property name: latitude invoke loopback:property Property type: (Use arrow keys)❯ string number boolean object array date buffer geopoint (other) Required? (y/N) : yLet's add another store property.Enter an empty property name when done. Property name: longitude invoke loopback:property Property type: (Use arrow keys)❯ string number boolean object array date buffer geopoint (other) Required? (y/N) : y
Tippen Sie „ja“ ein und drücken Sie die Eingabetaste.
Glückwunsch! Sie haben gerade Ihr erstes Modellobjekt mit LoopBack in Verbindung mit Node.js erstellt. Um zu sehen, was unter der Haube tatsächlich erstellt wurde, öffnen Sie die Datei store.json
, die sich im Verzeichnis root/common/models
Ihres Anwendungsverzeichnisses befindet. Suchen Sie den Eintrag stores, der wie folgt aussieht:
{ "name": "store", "base": "PersistedModel", "properties": { "opendate": { "type": "date", "required": true }, "type_store": { "type": "string", "required": true }, "latitude": { "type": "string", "required": true }, "longitude": { "type": "string", "required": true } }, "validations": , "relations": {}, "acls": , "methods": }
Wie Sie sehen können, haben wir ein Modell erstellt und die Eigenschaften, die wir definiert haben, sind dem Store-Modell zugewiesen. Das Feld public gibt an, dass wir dieses Modell der Welt über einen REST-Webdienst zugänglich machen wollen.
Das Mapping des Modells auf die Datenquelle wird im model-config.json
unter dem App Root/Server Ordner definiert. Das Datenquellenfeld gibt die Datenquelle an, die dieses Modell für CRUD-Operationen verwenden wird.
"store": { "dataSource": "mymongo", "public": true }
Schritt 8: Testen Sie die REST-basierte API##
Raten Sie mal? Sie haben gerade Ihren ersten REST-basierten Webdienst mit Node.js erstellt. Das war doch gar nicht so schlimm, oder? Probieren wir es aus, indem wir unseren Browser auf die soeben erstellte Anwendung richten. Sie können dies tun, indem Sie die folgende URL aufrufen:
http://0.0.0.0:3000/api/stores/
Sie erhalten eine JSON-Darstellung aller Walmart-Geschäfte, die wir in die Datenbank importiert haben, wie im folgenden Bild gezeigt:
Verwendung des StrongLoop Explorers##
Nun, das ist toll. Wir haben einen REST-Endpunkt, der alle Walmart-Speicher in der Datenbank zurückgibt, aber es scheint noch etwas zu fehlen, da wir keine Verwaltungsschnittstelle haben, um mit den Daten zu arbeiten oder um zu überprüfen, ob alle CRUD-Operationen funktionieren. Glücklicherweise bietet StrongLoop einen praktischen Browser, mit dem Sie alle Endpunkte Ihrer Anwendung untersuchen können. Um dies zu testen, öffnen Sie Ihren Browser und rufen Sie die folgende URL auf:
http://0.0.0.0:3000/explorer/
Wenn die Explorer-Seite geladen ist, erweitern Sie die stores
API, um alle verfügbaren Operationen zu sehen, die für das Modellobjekt zulässig sind. Dies ist in der folgenden Abbildung dargestellt:
Als Beispiel dafür, was Sie mit dem Explorer tun können, erweitern Sie die /stores/findOne
API und klicken Sie auf den Link Try it out!
, der die Datenbank abfragt und einen Datensatz zurückgibt, wie in der folgenden Abbildung dargestellt:
Wir gehen noch einen Schritt weiter, indem wir eine Kartendarstellung hinzufügen##
Gut, wir haben einen REST-basierten Endpunkt erstellt, der eine Liste aller Walmart-Filialen in unserer Datenbank zurückgibt. Zur weiteren Veranschaulichung der Geschwindigkeit, mit der man mit StrongLoop vollständige Anwendungen entwickeln kann, wollen wir ein responsives Frontend erstellen, das eine Karte mit Pins für jede Walmart-Filiale enthält.
Schritt 1: Erstellen des öffentlichen Verzeichnisses##
Standardmäßig werden, wie in der app.js-Datei des Projekts angegeben, alle Dateien im öffentlichen Verzeichnis, das sich im Stammverzeichnis der Anwendung befindet, an den Anfragenden geliefert. Da dieses Verzeichnis jedoch möglicherweise nicht standardmäßig vorhanden ist, müssen wir es erstellen. Öffnen Sie Ihr Terminal, wechseln Sie in das Stammverzeichnis Ihrer Anwendung und geben Sie folgenden Befehl ein:
$ mkdir public
Schritt 2: Erstellen der responsiven Karte##
Das nächste, was wir tun müssen, ist eine schöne Darstellung der Daten zu erstellen. Da wir die Längen- und Breitengrade jedes Geschäfts haben, wäre es großartig, diesen Inhalt in einer Karte darzustellen, die der Benutzer verschieben, vergrößern und verkleinern kann, usw. Diese Aufgabe ist viel einfacher, als Sie vielleicht erwarten, wenn wir uns einige vorhandene Bibliotheken zunutze machen. Am Ende der Erstellung dieser responsiven Ansicht wird das Ergebnis wie folgt aussehen:
Außerdem wird der Benutzer in der Lage sein, auf eine sehr detaillierte Ebene der Karte zu zoomen, um den nächstgelegenen Walmart zu sehen, wie im folgenden Bild zu sehen ist:
Der Code für die Webansicht der Anwendung nutzt die Längen- und Breitengrad-Eigenschaften, die wir auf unserem Modellobjekt definiert und in die Datenbank importiert haben. Wir werden auch die beliebte Leaflet-Bibliothek für die Erstellung der Karte und die Platzierung der Pins oder Markierungen auf der Karte verwenden.
Um diese Karte zu erstellen, erstellen Sie eine neue Datei im öffentlichen Verzeichnis mit dem Namen locatewalmart.html
und fügen Sie den folgenden JavaScript-Code hinzu:
<!doctype html><html lang="en"><head> <title>Walmart Stores</title> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5.1/leaflet.css" /><!--> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5.1/leaflet.ie.css" /><!--><script src="https://code.jquery.com/jquery-2.0.0.min.js"></script><link href='http://fonts.googleapis.com/css?family=oswald' rel='stylesheet' type='text/css'><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><style type="text/css">body { padding: 0; margin: 0;}html, body, #map { height: 100%; font-family: 'oswald';}.leaflet-container .leaflet-control-zoom { margin-left: 13px; margin-top: 70px;}#map { z-index: 1;}#title { z-index: 2; position: absolute; left: 10px; }</style></head><body><h1>Walmart Stores</h1><div></div><script src="http://cdn.leafletjs.com/leaflet-0.5.1/leaflet.js"></script><script>center = new L.LatLng(39.83, -98.58);zoom = 5;var map = L.map('map').setView(center, zoom);var markerLayerGroup = L.layerGroup().addTo(map);L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {maxZoom: 18,attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'}).addTo(map);function getPins(e){url = "http://0.0.0.0:3000/api/stores";$.get(url, pinTheMap, "json")}function pinTheMap(data){//clear the current pinsmap.removeLayer(markerLayerGroup);//add the new pinsvar markerArray = ;var lastNumber = 0;for (var i = 0; i < data.length; i++){store = data;if(store.latitude.length > 0 && store.longitude.length>0) {markerArray.push(L.marker());}}markerLayerGroup = L.layerGroup(markerArray).addTo(map);}map.whenReady(getPins)</script></body></html>
Wie Sie sehen können, ist der Code nur Standard-HTML und JavaScript. Der interessante Teil ist die Funktion getPins(e), in der wir einen REST-Aufruf an die API tätigen, die wir zuvor in diesem Blogbeitrag erstellt haben. Dann durchlaufen wir jedes Geschäft und erstellen eine Stecknadel anhand des Breiten- und Längengrads jedes Geschäfts. Ganz schön raffiniert, was?
Abschluss##
In diesem Blogbeitrag habe ich Ihnen gezeigt, wie man einen REST-basierten Webdienst erstellt, der eine Liste der Walmart-Filialen in den Vereinigten Staaten liefert. Nachdem wir den Webdienst mit Loopback erstellt hatten, fügten wir eine Frontend-Darstellung der Daten hinzu. Mit sehr wenig Arbeit waren wir in der Lage, eine voll funktionsfähige Anwendung viel schneller zu entwickeln, als es mit der aktuellen Sprache unserer Wahl möglich gewesen wäre. Wir haben auch einige der Ähnlichkeiten zwischen Node.js und PHP diskutiert. Obwohl ich PHP immer noch für eine großartige Sprache halte, habe ich persönlich festgestellt, dass Node.js eine großartige nächste Sprache zum Erlernen ist, da es ein reichhaltiges Ökosystem von Bibliotheken gibt und ich in der Lage bin, Anwendungen schnell zu erstellen.
Ich habe eine kurze Tabelle beigefügt, auf die Sie sich beziehen können, wenn Sie Node.js mit PHP vergleichen.
Feature |
PHP |
Node.js |
Großartige IDE |
Ja, mehrere Möglichkeiten mit IntelliJ, Zend Studio, Netbeans, etc |
Ja, Mehrfachauswahl mit Eclipse, Visual Studio, Codenvy, usw. |
Abhängigkeitsmanagement |
Composer, PEAR |
NPM |
Enterprise Ready |
Ja |
Ja |
Großes Ökosystem von Bibliotheken |
Ja, aber manchmal schwer zu finden |
Ja |
Gemeinsame Frameworks |
CodeIgniter, CakePHP, Laravel, etc |
Express, Meteor, usw. |
Datenbankunterstützung |
Ja |
Ja |
Nichtblockierendes IO |
Nein |
Ja |
Testen Frameworks |
Ja |
Ja |
Real-Echtzeitanwendungen |
Ja, mit zusätzlichen Prozessen wie Apache WebSocket usw. |
Ja |
Eingebauter Webserver |
Nein, die meisten Leute verwenden es in Verbindung mit Apache |
Ja |
- Bereit, APIs in Node.js zu entwickeln und sie mit Ihren Daten zu verknüpfen? Sehen Sie sich das Node.js LoopBack-Framework an. Mit einer einfachen npm-Installation können Sie entweder lokal oder in Ihrer bevorzugten Cloud loslegen.