Заполнение данных панели навигации из БД

#node.js #sails.js #sails-postgresql

#node.js #sails.js #паруса-postgresql

Вопрос:

У меня есть приложение sails, и я хочу заполнить данные выпадающего меню панели навигации из БД.

Я использую политики для вызова службы и заполнения sails.config.views.locals.Переменная headerData

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

Политика

 module.exports = function (req, res, next) {
try {
    if (sails.config.views.locals.HeaderData == 'undefined' || sails.config.views.locals.HeaderData == 'is not defined' || sails.config.views.locals.HeaderData == undefined) {
        sails.config.views.locals.HeaderData = [];
    }
    if (_.isEmpty(sails.config.views.locals.HeaderData)) {
        MenuItems.getMenuItems('items', function (err, response) {
            if (err) {
                sails.log.debug(err);
            }
            else {
                sails.config.views.locals.HeaderData = response[0].dataValues;
            }
        })
    }
}
catch (e) {
    console.log("errrrrr", e);
}
next();
  

}

Ответ №1:

next() вызывается до MenuItems.getMenuItems того, как может быть завершено. Итак, переместите next() оператор внутри обратного вызова:

 MenuItems.getMenuItems('items', function (err, response) {
    if (err) {
        sails.log.debug(err);
    }else{
        sails.config.views.locals.HeaderData = response[0].dataValues;
    }
    next();
})