Почему сервер не ждет ответа от БД (монго) и идет до последнего обработчика и дает 404?

Прежде всего, стоит понимать, что Node.js работает асинхронно. Это означает, что он не будет ждать завершения операций ввода-вывода (например, запросов к базе данных) перед тем, как продолжить выполнение кода. Вместо этого он будет вызывать соответствующие обратные функции (callback) или промисы, когда операции завершатся.

В случае, когда ваш сервер Node.js делает запрос к базе данных MongoDB, он отправляет запрос и не ждет, пока база данных вернет результат. Вместо этого сервер продолжает выполнение кода и может достигнуть конечной точки (обработчика), который возвращает 404, так как результат запроса к базе данных еще не получен.

Для того чтобы исправить данную ситуацию, необходимо использовать колбэки, промисы или асинхронные функции, чтобы гарантировать, что код, зависящий от ответа от базы данных, будет выполнен только после того, как данные будут получены. Например, при использовании колбэков, необходимо поместить код, зависящий от данных из базы, внутрь колбека запроса к базе данных.

Еще одним решением может быть использование асинхронных функций и ключевого слова async/await для удобного управления асинхронными операциями, что делает код более читаемым и легким для понимания.

Кроме того, не забывайте обработку ошибок при выполнении асинхронных операций, чтобы избежать проблем с undefined значениями или неожиданными ошибками в вашем приложении.