Um aplicativo de bate-papo em tempo real desenvolvido usando Node.js, Express, Mongoose, Socket.io, Passport e Redis.
Verifique a demonstração
Certifique-se de ter o Node.js e o npm instalados.
Clone ou baixe o repositório
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
Instalar dependências
$ npm install
Edite o arquivo de configuração em app/config/config.json com suas credenciais (consulte Configurações de instalação).
Baixe e instale o Redis.
Executando o servidor Redis (como administrador)
$ redis-server
Inicie o aplicativo
$ npm start
Seu aplicativo agora deve estar sendo executado em localhost:3000.
Certifique-se de ter o Heroku Toolbelt instalado.
Crie um novo aplicativo Heroku e envie seu aplicativo de bate-papo para um repositório remoto Git
$ heroku create
$ git push heroku master
ou
Agora, você precisa configurar variáveis de configuração no Heroku.
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(consulte Configurações de instalação).Uma última etapa é adicionar o Redis como um complemento no Heroku.
Você precisa configurar uma conta de faturamento mesmo que o complemento seja gratuito.
Abra seu aplicativo de bate-papo no navegador
$ heroku open
As configurações em produção serão atribuídas a partir de variáveis de ambiente no Heroku, enquanto as configurações de desenvolvimento residem no arquivo app/config/config.json .
Você precisa criar um banco de dados no MongoLab, depois criar um usuário de banco de dados, obter o MongoDB URI
e atribuí-lo a dbURI
.
Você precisa registrar um novo aplicativo no Facebook e no Twitter para obter seus tokens pelos quais os usuários podem conceder acesso ao seu aplicativo e fazer login usando suas contas sociais.
App ID
, App Secret
. Agora, você pode atribuir o App ID
a facebookClientID
e App Secret
a facebookClientSecret
.
Consumer Key
, Consumer Secret
. Agora, você pode atribuir a Consumer Key
a twitterConsumerKey
e Consumer Secret
a twitterConsumerSecret
.
Ele pode apontar para seu host local; http://localhost:3000/auth/facebook/callback
Ao implantar no Heroku, você terá algo parecido com isto; http://my-chat-app.herokuapp.com/auth/facebook/callback
A sessão precisa de uma string aleatória para garantir que o ID da sessão no navegador seja aleatório. Essa string aleatória é usada para criptografar o ID da sessão no navegador. Por quê? Para evitar adivinhação do ID da sessão.
Mongoose é usado para interagir com um MongoDB hospedado pelo MongoLab.
Existem dois esquemas; usuários e salas.
Cada usuário possui um nome de usuário, senha, ID social e imagem. Se o usuário estiver logado via nome de usuário e senha, o ID social deverá ser nulo, e se estiver logado por meio de uma conta social, a senha será nula.
Cada sala tem um título e uma série de conexões. Cada item na matriz de conexões representa um usuário conectado por meio de um soquete exclusivo; objeto composto por {userId + socketId} . Ambos juntos são únicos.
Cada modelo envolve o objeto Mongoose Model, substitui e fornece alguns métodos. Existem dois modelos; Usuário e Sala.
A sessão em aplicativos Express é melhor gerenciada usando o pacote express-session. Os dados da sessão são armazenados localmente no seu computador, enquanto são armazenados no banco de dados no ambiente de produção. Os dados da sessão serão excluídos após o logout.
O usuário pode fazer login usando um nome de usuário e senha ou fazer login através de uma conta social. A autenticação do usuário é feita usando Passport. O Passport possui documentação extensa e passo a passo sobre como implementar cada forma de autenticação.
Ter uma conexão ativa aberta entre o cliente e o servidor para que o cliente possa enviar e receber dados. Isso permite a comunicação em tempo real usando soquetes TCP. Isso é possível graças ao Socket.io.
O cliente começa conectando-se ao servidor através de um soquete (talvez também atribuído a um namespace específico). Depois que as conexões forem bem-sucedidas, o cliente e o servidor poderão emitir e ouvir eventos.
Existem dois namespaces usados; /rooms
e /chatroom
.
E não é desnecessário dizer que você precisa monitorar seu aplicativo. Winston pode registrar e capturar exceções não capturadas. Todos os logs são exibidos no console e salvos no arquivo debug.log .
No Heroku, você pode monitorar os logs clicando em Mais -> Visualizar Logs no canto superior esquerdo do painel do seu aplicativo.
Escrevi este roteiro em meu tempo livre durante meus estudos. Se você achar útil, apoie o projeto divulgando-o.
Contribua criando novos problemas, enviando pull requests no Github ou envie um email para: [email protected]
Construído sob licença do MIT.