node app.jsПосле чего сервер запустится на порте, указанном в .env файле (по умолчанию порт 5000).
В качестве базы данных используется PostgreSQL, параметры для подключения к которой в .env файле.
Доступ к клиентской части осуществляется с порта 5000, при соединении клиент-сервер на сервере выводится информационное сообщение.
Для регистрации юзер отправляет POST запрос (я использовал postman для этих всех манипуляций) на localhost:port/api/reg с JSON следующего вида:
{"username": "hello", "password": "world"}
в ответ сервер посылает токен.
Для логина юзер отправляет POST запрос на localhost:port/api/login с JSON следующего вида:
{"username": "hello", "password": "world"}
в ответ сервер посылает токен.
Клиенты через сервер обмениваются сообщениями, используя web-socket протокол.
Сообщение пользователя видно остальным пользователям и сохраняется в БД при соблюдении следующих условий:
- сообщение не является служебным (см.ниже)
- пользователь авторизован(см.ниже)
- сервер получает (в данном случае, чтобы не писать фронт - условимся, что клиент отправляет) сообщение вида {"username": "hello", "message": "world"}
В случае не соблюдения условий, сообщение не будет доставлено остальным пользователям/сохранено, а пользователю прийдет в чате информационное сообщение с указанием ошибки.
Юзер посылает сообщение вида:
{"username": "hello", "message": "auth token"}
where 'token' is token from api/reg or api/login
После чего его сообщения (за исключением служебных сообщений) становятся видны остальным подключенным клиентам (даже не авторизованным) и записываются в базу данных.
Юзер посылает сообщение вида
{"username": "hello", "message": "history NUM"} or {"username": "hello", "message": "simple NUM"}
where 'NUM' is number of messages to be recalled from history
После чего ему в чате приходит NUM последних сообщений из базы данных. Сообщения начинающиеся с "auth" и "history" не видны остальным участникам чата и не сохраняются.