使用 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]
根据麻省理工学院许可构建。