#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()
из функции обратного вызова firstthen()
. Либо добавьте явный оператор return, либо удалите фигурные скобки вокругresponse.json()
—>.then(response => response.json())
2. @Yousaf Да, это сработало! Спасибо! Но не могли бы вы объяснить, почему мне пришлось убрать фигурные скобки? Связано ли это с тем, как работают функции arrow?
3. Да, если присутствуют фигурные скобки, вам нужно добавить явный оператор return, в противном случае
undefined
возвращается из функции. Удаление фигурных скобок неявно возвращаетPromise
, возвращенныйresponse.json()