Приложение для чата в реальном времени, созданное с использованием 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
Теперь ваше приложение должно работать на локальном хосте: 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/обратный вызов
При развертывании в Heroku вы будете выглядеть примерно так: http://my-chat-app.herokuapp.com/auth/facebook/callback
Сеансу нужна случайная строка, чтобы идентификатор сеанса в браузере был случайным. Эта случайная строка используется для шифрования идентификатора сеанса в браузере. Почему? Чтобы предотвратить угадывание идентификатора сеанса.
Mongoose используется для взаимодействия с MongoDB, размещенной на MongoLab.
Есть две схемы; пользователи и комнаты.
У каждого пользователя есть имя пользователя, пароль, социальный идентификатор и изображение. Если пользователь входит в систему с помощью имени пользователя и пароля, тогда социальный идентификатор должен быть нулевым, а если вход в систему осуществляется через учетную запись социальной сети, то пароль будет нулевым.
Каждая комната имеет название и множество связей. Каждый элемент массива соединений представляет пользователя, подключенного через уникальный сокет; объект, состоящий из {userId +ocketId} . Они оба вместе уникальны.
Каждая модель оборачивает объект модели Mongoose, переопределяет и предоставляет некоторые методы. Есть две модели; Пользователь и комната.
Сеансами в приложениях Express лучше всего управлять с помощью пакета express-session. Данные сеанса хранятся локально на вашем компьютере, а также в базе данных производственной среды. Данные сеанса будут удалены при выходе из системы.
Пользователь может войти в систему, используя имя пользователя и пароль, или войти через учетную запись в социальной сети. Аутентификация пользователя осуществляется с помощью Passport. В Passport имеется обширная пошаговая документация по реализации каждого способа аутентификации.
Наличие активного соединения, открытого между клиентом и сервером, чтобы клиент мог отправлять и получать данные. Это позволяет осуществлять связь в реальном времени с использованием TCP-сокетов. Это стало возможным благодаря Socket.io.
Клиент начинается с подключения к серверу через сокет (возможно, также присвоенный определенному пространству имен). После успешного подключения клиент и сервер могут генерировать и прослушивать события.
Используются два пространства имен; /rooms
и /chatroom
.
И само собой разумеется, вам нужно следить за своим приложением. Winston может регистрировать и перехватывать неперехваченные исключения. Все журналы отображаются в консоли и сохраняются в файле debug.log .
В Heroku вы можете отслеживать журналы, нажав «Дополнительно» -> «Просмотреть журналы» в левом верхнем углу панели управления приложения.
Я написал этот сценарий в свободное время во время учебы. Если вы найдете это полезным, пожалуйста, поддержите проект, распространив информацию.
Внесите свой вклад, создавая новые задачи, отправляя запросы на включение на Github или отправляя электронное письмо по адресу: [email protected].
Построен по лицензии MIT.