Eine Echtzeit-Chat-Anwendung, die mit Node.js, Express, Mongoose, Socket.io, Passport und Redis erstellt wurde.
Demo ansehen
Stellen Sie sicher, dass Node.js und npm installiert sind.
Klonen Sie das Repository oder laden Sie es herunter
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
Abhängigkeiten installieren
$ npm install
Bearbeiten Sie die Konfigurationsdatei in app/config/config.json mit Ihren Anmeldeinformationen (siehe Setup-Konfigurationen).
Laden Sie Redis herunter und installieren Sie es.
Ausführen des Redis-Servers (als Administrator)
$ redis-server
Starten Sie die Anwendung
$ npm start
Ihre App sollte jetzt auf localhost:3000 ausgeführt werden.
Stellen Sie sicher, dass Sie den Heroku Toolbelt installiert haben.
Erstellen Sie eine neue Heroku-Anwendung und übertragen Sie Ihre Chat-Anwendung in ein Git-Remote-Repository
$ heroku create
$ git push heroku master
oder
Jetzt müssen Sie Konfigurationsvariablen auf Heroku einrichten.
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(siehe Setup-Konfigurationen).Ein letzter Schritt besteht darin, Redis als Add-on zu Heroku hinzuzufügen.
Sie müssen ein Rechnungskonto einrichten, auch wenn das Add-on kostenlos ist.
Öffnen Sie Ihre Chat-Anwendung im Browser
$ heroku open
Die Konfigurationen für die Produktion werden von Umgebungsvariablen auf Heroku zugewiesen, während sich die Entwicklungskonfigurationen in der Datei app/config/config.json befinden.
Sie müssen eine Datenbank auf MongoLab erstellen, dann einen Datenbankbenutzer erstellen, den MongoDB URI
abrufen und ihn dbURI
zuweisen.
Sie müssen eine neue Anwendung sowohl auf Facebook als auch auf Twitter registrieren, um Ihre Token zu erhalten, mit denen Benutzer Zugriff auf Ihre Anwendung gewähren und sich mit ihren sozialen Konten anmelden können.
App ID
und App Secret
. Jetzt können Sie die App ID
facebookClientID
und App Secret
facebookClientSecret
zuweisen.
Consumer Key
, Consumer Secret
. Jetzt können Sie den Consumer Key
twitterConsumerKey
und Consumer Secret
twitterConsumerSecret
zuweisen.
Es kann auf Ihren lokalen Host verweisen. http://localhost:3000/auth/facebook/callback
Bei der Bereitstellung in Heroku sieht etwas so aus: http://my-chat-app.herokuapp.com/auth/facebook/callback
Die Sitzung benötigt eine zufällige Zeichenfolge, um sicherzustellen, dass die Sitzungs-ID im Browser zufällig ist. Diese zufällige Zeichenfolge wird verwendet, um die Sitzungs-ID im Browser zu verschlüsseln. Warum? Um das Erraten der Sitzungs-ID zu verhindern.
Mongoose wird verwendet, um mit einer MongoDB zu interagieren, die von MongoLab gehostet wird.
Es gibt zwei Schemata; Benutzer und Räume.
Jeder Benutzer hat einen Benutzernamen, ein Passwort, eine soziale ID und ein Bild. Wenn der Benutzer über Benutzername und Passwort angemeldet ist, muss die soziale ID null sein, und wenn er über ein soziales Konto angemeldet ist, ist das Passwort null.
Jeder Raum hat einen Titel und eine Reihe von Verbindungen. Jedes Element im Array „Verbindungen“ stellt einen Benutzer dar, der über einen eindeutigen Socket verbunden ist. Objekt bestehend aus {userId + socketId} . Beide zusammen sind einzigartig.
Jedes Modell umschließt das Mongoose-Modellobjekt, überschreibt es und stellt einige Methoden bereit. Es gibt zwei Modelle; Benutzer und Raum.
Sitzungen in Express-Anwendungen werden am besten mit dem Express-Session-Paket verwaltet. Sitzungsdaten werden lokal auf Ihrem Computer gespeichert, während sie in der Datenbank der Produktionsumgebung gespeichert werden. Beim Abmelden werden die Sitzungsdaten gelöscht.
Der Benutzer kann sich entweder mit einem Benutzernamen und einem Passwort anmelden oder sich über ein soziales Konto anmelden. Die Benutzerauthentifizierung erfolgt über Passport. Passport verfügt über eine ausführliche und schrittweise Dokumentation zur Implementierung der einzelnen Authentifizierungsmethoden.
Zwischen dem Client und dem Server muss eine aktive Verbindung geöffnet sein, damit der Client Daten senden und empfangen kann. Dies ermöglicht eine Echtzeitkommunikation über TCP-Sockets. Dies wird durch Socket.io ermöglicht.
Der Client verbindet sich zunächst über einen Socket mit dem Server (möglicherweise auch einem bestimmten Namespace zugeordnet). Sobald die Verbindung erfolgreich ist, können Client und Server Ereignisse ausgeben und abhören.
Es werden zwei Namespaces verwendet; /rooms
und /chatroom
.
Und es ist nicht selbstverständlich, dass Sie Ihre Anwendung überwachen müssen. Winston kann nicht abgefangene Ausnahmen protokollieren und abfangen. Alle Protokolle werden in der Konsole angezeigt und in der Datei debug.log gespeichert.
Auf Heroku können Sie die Protokolle überwachen, indem Sie oben links in Ihrem Anwendungs-Dashboard auf Mehr -> Protokolle anzeigen klicken.
Ich habe dieses Skript in meiner Freizeit während meines Studiums geschrieben. Wenn Sie es nützlich finden, unterstützen Sie das Projekt bitte, indem Sie es verbreiten.
Tragen Sie bei, indem Sie neue Issues erstellen, Pull-Requests auf Github senden oder eine E-Mail an [email protected] senden
Gebaut unter MIT-Lizenz.