使用 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
或者
現在,您需要在 Heroku 上設定配置變數。
{ 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 進行互動。
有兩種模式;用戶和房間。
每個用戶都有一個用戶名、密碼、社交 ID 和圖片。如果使用者透過使用者名稱和密碼登錄,則社交 ID 必須為空,如果透過社交帳戶登錄,則密碼將為空。
每個房間都有一個標題和一系列連接。連接數組中的每一項代表一個透過唯一套接字連接的使用者;由{userId + socketId}組成的物件。兩者結合起來都是獨一無二的。
每個模型都包裝了 Mongoose Model 對象,重寫並提供了一些方法。有兩種型號;用戶和房間。
Express 應用程式中的會話最好使用express-session 套件進行管理。會話資料儲存在您的電腦本機,而儲存在生產環境的資料庫中。退出時會話資料將被刪除。
使用者可以使用使用者名稱和密碼登錄,也可以透過社群帳號登入。使用者身份驗證是使用 Passport 完成的。 Passport 提供了大量有關如何實施每種身分驗證方式的逐步文件。
在客戶端和伺服器之間開啟活動連接,以便客戶端可以發送和接收資料。這允許使用 TCP 套接字進行即時通訊。 Socket.io 使這成為可能。
客戶端首先透過套接字(也可能分配給特定的命名空間)連接到伺服器。一旦連線成功,客戶端和伺服器就可以發出並偵聽事件。
使用了兩個命名空間; /rooms
和/chatroom
。
不言而喻,您需要監視您的應用程式。 Winston 可以記錄並捕獲未捕獲的異常。所有日誌都顯示在控制台中,並保存在debug.log檔案中。
在 Heroku 上,您可以透過點擊應用程式儀表板左上角的更多 -> 查看日誌來監控日誌。
這個劇本是我在學習期間利用空閒時間寫的。如果您覺得它有用,請透過傳播來支持該專案。
透過建立新問題、在 Github 上發送拉取請求來做出貢獻,或者您可以發送電子郵件至:[email protected]
根據麻省理工學院許可建構。