From 8c77e5907834cb110a99a4ace0356868107c88e6 Mon Sep 17 00:00:00 2001 From: Yiyu He Date: Fri, 24 Mar 2017 18:07:32 +0800 Subject: [PATCH] feat: warn if some confused configurations exist in config (#637) --- config/config.default.js | 16 ++++++++++++++++ lib/application.js | 16 ++++++++++++++++ .../config/config.default.js | 7 +++++++ .../apps/confused-configuration/package.json | 3 +++ test/lib/application.test.js | 13 +++++++++++++ 5 files changed, 55 insertions(+) create mode 100644 test/fixtures/apps/confused-configuration/config/config.default.js create mode 100644 test/fixtures/apps/confused-configuration/package.json diff --git a/config/config.default.js b/config/config.default.js index 0aaf5fab6b..c3219dbe68 100644 --- a/config/config.default.js +++ b/config/config.default.js @@ -117,6 +117,22 @@ module.exports = appInfo => { dump: { ignore: new Set([ 'pass', 'pwd', 'passd', 'passwd', 'password', 'keys', 'secret' ]), }, + + /** + * configurations are confused to users + * { + * [unexpectedKey]: [expectedKey], + * } + * @member Config#confusedConfigurations + * @type {Object} + */ + confusedConfigurations: { + bodyparser: 'bodyParser', + notFound: 'notfound', + sitefile: 'siteFile', + middlewares: 'middleware', + httpClient: 'httpclient', + }, }; /** diff --git a/lib/application.js b/lib/application.js index eac1e07add..3f86de8383 100644 --- a/lib/application.js +++ b/lib/application.js @@ -40,6 +40,7 @@ class Application extends EggApplication { // dump config after loaded, ensure all the dynamic modifications will be recorded this.dumpConfig(); + this.warnConfusedConfig(); this.bindEvents(); } @@ -213,6 +214,21 @@ class Application extends EggApplication { // expose server to support websocket this.on('server', server => this.onServer(server)); } + + /** + * warn when confused configurations are present + * + * @private + */ + warnConfusedConfig() { + const confusedConfigurations = this.config.confusedConfigurations; + Object.keys(confusedConfigurations).forEach(key => { + if (this.config[key] !== undefined) { + this.logger.warn('Unexpected config key `%s` exists, Please use `%s` instead.', + key, confusedConfigurations[key]); + } + }); + } } module.exports = Application; diff --git a/test/fixtures/apps/confused-configuration/config/config.default.js b/test/fixtures/apps/confused-configuration/config/config.default.js new file mode 100644 index 0000000000..905a9bcf4d --- /dev/null +++ b/test/fixtures/apps/confused-configuration/config/config.default.js @@ -0,0 +1,7 @@ +'use strict'; + +exports.middlewares = []; +exports.bodyparser = {}; +exports.sitefile = {}; +exports.notFound = {}; +exports.httpClient = {}; diff --git a/test/fixtures/apps/confused-configuration/package.json b/test/fixtures/apps/confused-configuration/package.json new file mode 100644 index 0000000000..321931cdbb --- /dev/null +++ b/test/fixtures/apps/confused-configuration/package.json @@ -0,0 +1,3 @@ +{ + "name": "confused-configuration" +} diff --git a/test/lib/application.test.js b/test/lib/application.test.js index 4cc690261c..dac1a18a90 100644 --- a/test/lib/application.test.js +++ b/test/lib/application.test.js @@ -134,6 +134,19 @@ describe('test/lib/application.test.js', () => { }); }); + describe('warn confused configurations', () => { + it('should warn if confused configurations exist', function* () { + const app = utils.app('apps/confused-configuration'); + yield app.ready(); + const logs = fs.readFileSync(utils.getFilepath('apps/confused-configuration/logs/confused-configuration/confused-configuration-web.log'), 'utf8'); + assert(logs.match(/Unexpected config key `bodyparser` exists, Please use `bodyParser` instead\./)); + assert(logs.match(/Unexpected config key `notFound` exists, Please use `notfound` instead\./)); + assert(logs.match(/Unexpected config key `sitefile` exists, Please use `siteFile` instead\./)); + assert(logs.match(/Unexpected config key `middlewares` exists, Please use `middleware` instead\./)); + assert(logs.match(/Unexpected config key `httpClient` exists, Please use `httpclient` instead\./)); + }); + }); + describe('test on apps/demo', () => { let app; before(() => {