Основная сложность создания такого чата в том, как уведомлять собеседника о новом сообщении.
Собственно, есть 2 способа:
1) Топорный и ленивый. Через SetInterval() отправлять к базе запросы через ajax и смотреть, не появилось ли в ней новых записей.
2) Красивый и правильный. Я писал такой чат, но т к стек был ASP.NET, то использовал SignalR (дотнетовская обертка для WebSocket). Но раз вас стек другой, то почитайте про WebSocket и соответствующие библиотеки для работы с ним на сервере и на клиенте.
https://bablofil.ru/nodejs-websocket-chat/
Как написать чат на websocket'ax (javascript)?
https://medv.io/create-chat-on-php/
Все остальное довольно примитивно.