AJAX> Запрос MongoDB работает только пять раз, затем сервер останавливает обработку запросов, и я не могу обновить страницу - PullRequest
0 голосов
/ 24 сентября 2018

Я создаю приложение React / Express / MongoDB.Я пытаюсь сделать живой поиск, который возвращает результаты по мере ввода.Вызов БД на сервер работает только пять раз, а затем останавливается.Тогда я не могу обновить браузер, поэтому я думаю, что сервер в этот момент перестает обрабатывать запросы.Блокировал ли я цикл событий узла?

Когда я останавливал сервер, все неотвеченные ответы отображаются в консоли браузера:

POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE POST http://localhost:3000/action/searchTextIndex net::ERR_EMPTY_RESPONSE

Вот мой AJAX-вызов,ПРИМЕЧАНИЕ: это регулируется для вызова с максимальной частотой 800 мс.

    search(query, dbCollection) {
        axios.post('/action/searchTextIndex', {
            dbCollection,
            query
        })
        .then(response => {
            console.log(response);
        })
        .catch(err => console.log(err))
    }

А вот и экспресс-код js:

    const searchTextIndex = (req, res, db) => {
        const { query, collection } = req.body;

        db.collection(collection).find(
            { $text: { $search: query } }
        )
        .project({ score: { $meta: 'textScore' } })
        .sort({ score: { $meta: 'textScore' } })
        .toArray((err, result) => {
            if (err) {
               console.log(err);
               res.send({ type: 'server_error' });
               return;
             }

             console.log(result);
             return;
        })
    }

Почему он будет работать только пять раз, даже если яподождать несколько секунд, прежде чем нажимать каждый символ в поле поиска?

1 Ответ

0 голосов
/ 24 сентября 2018

Похоже, проблема в том, что на ваш сервер не отправляется ответ на счастливый путь.Посмотри, работает ли это.Если это не помогает, включите код, в котором параметр db определен и передан в качестве аргумента searchTextIndex.

const searchTextIndex = (req, res, db) => {
    const { query, collection } = req.body;

    db.collection(collection).find(
        { $text: { $search: query } }
    )
    .project({ score: { $meta: 'textScore' } })
    .sort({ score: { $meta: 'textScore' } })
    .toArray((err, result) => {
        if (err) {
           console.log(err);
           res.send({ type: 'server_error' });
           return;
         }

         console.log(result);
         
         // need to be sure you send the response
         return res.json(result);
    })
}
...