Я получаю сообщение об ошибке: не могу установить заголовки после отправки клиентам, код работает, но почему эта ошибка возникает
Вы используете res.json в цикле.Вы можете вызвать res.json только один раз в маршруте.
Когда вы вызываете res.json, он отправляет все ответы и заголовки и отключает http-соединение.
Вы должны отредактировать свой код так, чтобы res.json вызывался, когда вся ваша бизнес-логиказавершено.
и есть лучший способ написать этот код
Да, ваш код стал очень жалким для чтения.Почему бы вам не сделать несколько функций для мелких деталей?Тем самым вы можете уменьшить количество вложенных обещаний и сделать все читабельным.