0

Sails アプリケーションがあり、DB からナビゲーション バーのドロップダウン メニュー データを入力したいと考えています。

ポリシーを使用してサービスを呼び出し、sails.config.views.locals.HeaderData 変数を設定しています

しかし、帆のいくつかの非同期機能のために、リクエストがポリシーに届いたときではなく、コントローラーが応答を送信したときにのみサービスが呼び出されます。これにより、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();

}

4

1 に答える 1

3

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();
})
于 2016-10-07T07:57:33.520 に答える