krakenjs / kraken-js

An express-based Node.js web application bootstrapping module.
Other
4.94k stars 459 forks source link

shortstop-handlers exec, access config value in handler #460

Open tomalex0 opened 8 years ago

tomalex0 commented 8 years ago

I'm looking for an option to get config value in exec handler function, below one i tried but

exec:./lib/utility#getStatus get triggered first and config value will be undefined and might be the expected behavior , is there any alternative approach?

First i was looking into option like this https://github.com/krakenjs/kraken-js/issues/316 . For this i need to write custom shortstop handler and not sure how to do that in existing kraken setup.

Please let me know if you have any suggestions or solution .

config.json

{
"check" : "exec:./lib/utility#getStatus",
}

utility.js

var settings;

module.exports.init = function (config) {
    settings = config;
}

module.exports.getStatus = function () {

    //How to get config here? console.log(settings);  as of now this is undefined

    return true;
};

spec.js

module.exports = function spec() {

    return {
        /**
         *
         * @param config
         * @param next
         */
        onconfig: function(config, next) {
            //Initiate Utility Function with config
            require('./utility').init(config);

            next(null, config);

        }
    };
};
jonathansamines commented 8 years ago

Hey @tomalex0 you could just export a function, which returns the getStatus function as an object, which would have access to the config object. Would be something like:

utility.js

  module.exports = (config) => {
     return {
        getStatus() {
           // at this point I have access to the "config" object
            return true;
        }
     };
  };

spec.js

module.exports = function spec() {
    return {
        /**
         *
         * @param config
         * @param next
         */
        onconfig: function(config, next) {
            //Initiate Utility Function with config
            const util = require('./utility')(config);

           var status = util.getStatus(); // true

           // at this point you could also merge the resulting value from `util.getStatus` to the current kraken configuration by calling config.use({ status });

            next(null, config);
        }
    };
};
tomalex0 commented 8 years ago

@jonathansamines thanks for the response, let me give this a try