Una aplicación de chat en tiempo real creada con Node.js, Express, Mongoose, Socket.io, Passport y Redis.
Ver demostración
Asegúrese de tener Node.js y npm instalados.
Clonar o descargar el repositorio
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
Instalar dependencias
$ npm install
Edite el archivo de configuración en app/config/config.json con sus credenciales (consulte Configuraciones de instalación).
Descargue e instale Redis.
Ejecutando Redis Server (como administrador)
$ redis-server
Iniciar la aplicación
$ npm start
Su aplicación ahora debería estar ejecutándose en localhost:3000.
Asegúrate de tener instalado Heroku Toolbelt.
Cree una nueva aplicación Heroku y envíe su aplicación de chat a un repositorio remoto de Git
$ heroku create
$ git push heroku master
o
Ahora, necesitas configurar variables de configuración en Heroku.
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(consulte Configuraciones de configuración).Un último paso es agregar Redis como complemento en Heroku.
Debes configurar una cuenta de facturación incluso si el complemento es gratuito.
Abra su aplicación de chat en el navegador
$ heroku open
Las configuraciones en producción se asignarán desde Variables de entorno en Heroku, mientras que las configuraciones de desarrollo residen dentro del archivo app/config/config.json .
Debe crear una base de datos en MongoLab, luego crear un usuario de base de datos, obtener el MongoDB URI
y asignarlo a dbURI
.
Debe registrar una nueva aplicación tanto en Facebook como en Twitter para obtener sus tokens mediante los cuales los usuarios pueden otorgar acceso a su aplicación e iniciar sesión usando sus cuentas sociales.
App ID
, App Secret
. Ahora, puede asignar el App ID
a facebookClientID
y App Secret
a facebookClientSecret
.
Consumer Key
, Consumer Secret
. Ahora, puede asignar la Consumer Key
a twitterConsumerKey
y Consumer Secret
a twitterConsumerSecret
.
Puede apuntar a su servidor local; http://localhost:3000/auth/facebook/callback
Cuando lo implementes en Heroku, tendrás algo parecido a esto; http://my-chat-app.herokuapp.com/auth/facebook/callback
La sesión necesita una cadena aleatoria para garantizar que la identificación de la sesión en el navegador sea aleatoria. Esa cadena aleatoria se utiliza para cifrar la identificación de la sesión en el navegador, ¿por qué? Para evitar adivinar la identificación de la sesión.
Mongoose se utiliza para interactuar con MongoDB alojado en MongoLab.
Hay dos esquemas; usuarios y salas.
Cada usuario tiene un nombre de usuario, contraseña, identificación social e imagen. Si el usuario inicia sesión mediante nombre de usuario y contraseña, entonces la identificación social debe ser nula y, si inicia sesión a través de una cuenta social, la contraseña será nula.
Cada habitación tiene un título y una variedad de conexiones. Cada elemento de la matriz de conexiones representa un usuario conectado a través de un socket único; objeto compuesto por {userId + socketId} . Ambos juntos son únicos.
Cada modelo envuelve el objeto Mongoose Model, lo anula y proporciona algunos métodos. Hay dos modelos; Usuario y Sala.
La sesión en aplicaciones Express se gestiona mejor utilizando el paquete express-session. Los datos de la sesión se almacenan localmente en su computadora, mientras que se almacenan en la base de datos en el entorno de producción. Los datos de la sesión se eliminarán al cerrar sesión.
El usuario puede iniciar sesión utilizando un nombre de usuario y contraseña, o iniciar sesión a través de una cuenta social. La autenticación del usuario se realiza mediante Passport. Passport tiene documentación extensa y paso a paso sobre cómo implementar cada forma de autenticación.
Tener una conexión activa abierta entre el cliente y el servidor para que el cliente pueda enviar y recibir datos. Esto permite la comunicación en tiempo real mediante sockets TCP. Esto es posible gracias a Socket.io.
El cliente comienza conectándose al servidor a través de un socket (tal vez también asignado a un espacio de nombres específico). Una vez que las conexiones son exitosas, el cliente y el servidor pueden emitir y escuchar eventos.
Se utilizan dos espacios de nombres; /rooms
y /chatroom
.
Y no hace falta decir que necesita monitorear su aplicación. Winston puede registrar y detectar excepciones no detectadas. Todos los registros se muestran en la consola y se guardan en el archivo debug.log .
En Heroku, puede monitorear los registros haciendo clic en Más -> Ver registros en la parte superior izquierda del panel de su aplicación.
He escrito este guión en mi tiempo libre durante mis estudios. Si lo encuentra útil, apoye el proyecto difundiendo el mensaje.
Contribuya creando nuevos problemas, enviando solicitudes de extracción en Github o puede enviar un correo electrónico a: [email protected]
Construido bajo licencia MIT.