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

Проблема, когда сервер Node.js не ждет ответа от базы данных MongoDB и идет до конечного обработчика, который возвращает код состояния 404, может возникать из-за асинхронной природы Node.js и работы с базой данных.

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

Чтобы избежать данной проблемы и дождаться ответа от базы данных, можно использовать колбэки (callbacks), промисы (promises) или асинхронные функции (async/await). Например, с использованием промисов ваш код может выглядеть следующим образом:

const express = require('express');
const mongoose = require('mongoose');
const app = express();

// Подключение к базе данных
mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true, useUnifiedTopology: true });

// Определение модели
const User = mongoose.model('User', { name: String });

// Роут обработки запросов
app.get('/users', (req, res) => {
    User.find().then(users => {
        res.json(users);
    }).catch(err => {
        res.status(500).send('Internal Server Error');
    });
});

// Запуск сервера
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

В данном примере, метод User.find() возвращает промис, который позволяет дождаться ответа от базы данных перед отправкой данных клиенту.

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