#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();
})