Node.js、Express、Mongoose、Socket.io、Passport、Redis を使用して構築されたリアルタイム チャット アプリケーション。
チェックデモ
Node.js と npm がインストールされていることを確認してください。
リポジトリのクローンを作成またはダウンロードする
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
依存関係のインストール
$ npm install
app/config/config.jsonの構成ファイルを自分の認証情報を使用して編集します (「構成のセットアップ」を参照)。
Redisをダウンロードしてインストールします。
Redisサーバーの実行(管理者として)
$ redis-server
アプリケーションを起動する
$ npm start
これでアプリは localhost:3000 で実行されるはずです。
Heroku Toolbelt がインストールされていることを確認してください。
新しい Heroku アプリケーションを作成し、チャット アプリケーションを Git リモート リポジトリにプッシュします。
$ heroku create
$ git push heroku master
または
次に、Heraku で構成変数を設定する必要があります。
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(セットアップ構成を参照) です。最後のステップは、Redis を Heroku にアドオンとして追加することです。
アドオンが無料の場合でも、請求先アカウントを設定する必要があります。
ブラウザでチャット アプリケーションを開きます
$ heroku open
実稼働環境の構成は Heroku の環境変数から割り当てられますが、開発環境の構成はapp/config/config.jsonファイル内に存在します。
MongoLab でデータベースを作成し、次にデータベース ユーザーを作成し、 MongoDB URI
取得して、それをdbURI
に割り当てる必要があります。
ユーザーがアプリケーションへのアクセスを許可し、ソーシャル アカウントを使用してログインできるトークンを取得するには、Facebook と Twitter の両方に新しいアプリケーションを登録する必要があります。
App ID
、 App Secret
を取得します。これで、 App ID
facebookClientID
に、 App Secret
をfacebookClientSecret
に割り当てることができます。
Consumer Key
とConsumer Secret
取得します。これで、 Consumer Key
twitterConsumerKey
に割り当て、 Consumer Secret
twitterConsumerSecret
に割り当てることができます。
ローカルホストを指すこともできます。 http://localhost:3000/auth/facebook/callback
Heroku にデプロイすると、次のようになります。 http://my-chat-app.herokuapp.com/auth/facebook/callback
ブラウザ内のセッション ID がランダムであることを確認するには、セッションにはランダムな文字列が必要です。このランダムな文字列は、ブラウザでセッション ID を暗号化するために使用されます。なぜですか?セッション ID の推測を防ぐため。
Mongoose は、MongoLab によってホストされている MongoDB と対話するために使用されます。
2 つのスキーマがあります。ユーザーも部屋も。
各ユーザーはユーザー名、パスワード、ソーシャル ID、写真を持っています。ユーザーがユーザー名とパスワードを使用してログインしている場合、ソーシャル ID は null である必要があり、ソーシャル アカウントを介してログインしている場合、パスワードは null になります。
各部屋にはタイトルと一連の接続があります。接続配列内の各項目は、一意のソケットを介して接続されているユーザーを表します。 {userId +ソケットId}で構成されるオブジェクト。両方ともユニークです。
各モデルは Mongoose Model オブジェクトをラップし、いくつかのメソッドをオーバーライドして提供します。 2 つのモデルがあります。ユーザーとルーム。
Express アプリケーションのセッションは、express-session パッケージを使用して管理するのが最適です。セッション データはコンピューター上にローカルに保存されますが、実稼働環境のデータベースには保存されます。ログアウトするとセッションデータは削除されます。
ユーザーは、ユーザー名とパスワードを使用してログインするか、ソーシャル アカウント経由でログインできます。ユーザー認証はパスポートを使用して行われます。 Passport には、各認証方法の実装方法に関する詳細なステップバイステップのドキュメントが含まれています。
クライアントとサーバーの間でアクティブな接続が開かれ、クライアントがデータを送受信できるようになります。これにより、TCP ソケットを使用したリアルタイム通信が可能になります。これは Socket.io によって可能になります。
クライアントは、ソケット (特定の名前空間に割り当てられている場合もあります) を介してサーバーに接続することから始まります。接続が成功すると、クライアントとサーバーはイベントを発行してリッスンできるようになります。
2 つの名前空間が使用されます。 /rooms
と/chatroom
。
言うまでもなく、アプリケーションを監視する必要があります。 Winston は、キャッチされない例外をログに記録してキャッチできます。すべてのログはコンソールに表示され、 debug.logファイルに保存されます。
Heroku では、アプリケーション ダッシュボードの左上にある[詳細] -> [ログの表示]をクリックしてログを監視できます。
このスクリプトは勉強中の自由時間に書きました。役立つと思われた場合は、広めてプロジェクトをサポートしてください。
新しい問題を作成するか、Github でプル リクエストを送信するか、[email protected] に電子メールを送信して貢献してください。
MIT ライセンスに基づいて構築されています。