Отправить данные mongoose во внешний интерфейс JavaScript с помощью Express

#javascript #node.js #express #mongoose #fetch

#javascript #node.js #экспресс #мангуст #выборка

Вопрос:

У меня есть вопрос.

Мои маршруты приложения Express «http://localhost:8000 /» на мой index.html это статический файл, я не использую механизм шаблонов. Это index.html имеет обычный JavaScript-файл (называемый frontend.js ), прикрепленный к нему, для взаимодействия с DOM. В frontend.js существует запрос GET с использованием Fetch api на URL «/ get-list», например:

 fetch("/get-list", {
        method: "GET",         
        headers: { "Content-Type": "application/json"}
        }).then(response => {response.json();
        }).then(data => {console.log("Data:", data);});
  

В моем приложении Express у меня есть настройка маршрута получения для этой выборки, например:

 const titles = [];
app.get("/get-list", (req, res) => {
    Book.find()
    .then((result) => {
        console.log(result);
        res.send(JSON.stringify(result));
    })
    .catch ((err) => {
        console.log(err);
    });
});
  

Экземпляр Book представляет модель mongoose. Как вы можете видеть, маршрут «/ get-list» выполняет поиск по моей базе данных и сохраняет результат в переменной result. Журнал, который я получаю в консоли, является ожидаемым результатом. Но когда я пытаюсь получить эти данные в моем frontend.js он возвращает «undefined» в console.log(«Data:», данные);

Итак, мой актуальный вопрос: как мне отправить данные из моей базы данных во внешний интерфейс, используя запрос fetch GET? Заранее спасибо.

Комментарии:

1. Вам нужно вернуть данные, Promise возвращенные response.json() из функции обратного вызова first then() . Либо добавьте явный оператор return, либо удалите фигурные скобки вокруг response.json() —> .then(response => response.json())

2. @Yousaf Да, это сработало! Спасибо! Но не могли бы вы объяснить, почему мне пришлось убрать фигурные скобки? Связано ли это с тем, как работают функции arrow?

3. Да, если присутствуют фигурные скобки, вам нужно добавить явный оператор return, в противном случае undefined возвращается из функции. Удаление фигурных скобок неявно возвращает Promise , возвращенный response.json()