Я знаю, что этот вопрос задавался несколько раз, но, похоже, никто не отвечает на конкретную часть использования результатов запроса для дальнейшего использования.
Я также знаю, что проблема заключается в том, что запросы являются асинхронными, и, возможно, именно поэтому я не могу найти удовлетворительный ответ.
Вот что я пытаюсь сделать:
У меня есть проект узла с несколькими разделами, каждый раздел с различным содержанием. Эти разделы имеют индивидуальные свойства, которые я решил сохранить в модели для дальнейшего использования.
Пока (и для простоты) у меня есть следующая схема:
const SectionSchema = new Schema({
name: String,
description: String
})
const Section = mongoose.model('Sections',SectionSchema)
Я бы хотел получить эти данные для использования в одном из моих макетов (заголовок навигации), поэтому я попробовал что-то вроде этого:
const express = require('express')
const app = express()
Section.find().then(function(docs){
app.locals.sections = docs
})
console.log(app.locals.sections) // undefined
Это, очевидно, не совсем работает из-за того, что find()
является асинхронным, или, скорее, он работает, но значения заполняются в другое время. Я знаю, что если я выполню проверку console.log
внутри функции, то получу результат, но это не проблема, я хочу сохранить данные в app.locals
, чтобы впоследствии я мог использовать их в одном из своих макетов.
В идеале я хотел бы загрузить эти данные один раз, прежде чем сервер начнет прослушивать запросы.
Не стесняйтесь поправлять меня, если я сделал какие-то неправильные предположения, я очень новичок в узле, поэтому я пока не совсем знаю, как подходить к вещам.
Заранее спасибо.
РЕДАКТИРОВАТЬ: я должен был упомянуть, что я использую экспресс.