From 2b0dbd30798a0c5cf4224784daf132fd32ed7f60 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Wed, 31 Aug 2016 10:46:04 +0800 Subject: [PATCH] refactor: change accept to getter (#68) --- app/extend/application.js | 16 +++++++--------- app/extend/context.js | 10 ++++++---- app/extend/request.js | 11 +++++++++++ package.json | 2 +- test/lib/core/loader/load_plugin.test.js | 6 ++++-- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/app/extend/application.js b/app/extend/application.js index 7d6b673843..395581bade 100644 --- a/app/extend/application.js +++ b/app/extend/application.js @@ -2,7 +2,6 @@ const http = require('http'); const assert = require('assert'); -const accepts = require('accepts'); const Keygrip = require('../../lib/core/keygrip'); const Service = require('../../lib/core/base_service'); const view = require('../../lib/core/view'); @@ -16,7 +15,7 @@ const VIEW = Symbol('Application#View'); const LOCALS = Symbol('Application#locals'); const LOCALS_LIST = Symbol('Application#localsList'); -// 空的 instrument 返回,用于生产环境,避免每次创建对象 +// empty instrument object, use on prod env, avoid create object every time. const emptyInstrument = { end() {}, }; @@ -24,11 +23,11 @@ const emptyInstrument = { module.exports = { /** - * 创建 koa 上下文 + * Create egg context * @method Application#createContext - * @param {Req} req node 原生的 Request 对象 - * @param {Res} res node 原生的 Response 对象 - * @return {Context} 返回 koa 上下文 + * @param {Req} req - node native Request object + * @param {Res} res - node native Response object + * @return {Context} context object */ createContext(req, res) { const app = this; @@ -43,7 +42,6 @@ module.exports = { response.request = request; context.onerror = context.onerror.bind(context); context.originalUrl = request.originalUrl = req.url; - context.accept = request.accept = accepts(req); /** * Request start time @@ -54,14 +52,14 @@ module.exports = { }, /** - * Service 基类 + * Service class * @member {Service} Application#Service * @since 1.0.0 */ Service, /** - * AppWorkerClient 基类 + * AppWorkerClient class * @member {AppWorkerClient} Application#AppWorkerClient */ AppWorkerClient, diff --git a/app/extend/context.js b/app/extend/context.js index 514d9cd60b..de17a0a7fe 100644 --- a/app/extend/context.js +++ b/app/extend/context.js @@ -356,13 +356,15 @@ const proto = module.exports = { * @see Request#isAjax * @since 1.0.0 */ -delegate(proto, 'request') - .getter('isAjax') - .getter('acceptJSON'); /** * @member {Array} Context#queries * @see Request#queries * @since 1.0.0 */ -delegate(proto, 'request').getter('queries'); + +delegate(proto, 'request') + .getter('isAjax') + .getter('acceptJSON') + .getter('queries') + .getter('accept'); diff --git a/app/extend/request.js b/app/extend/request.js index e6e56f12e1..1576ab1420 100644 --- a/app/extend/request.js +++ b/app/extend/request.js @@ -1,9 +1,11 @@ 'use strict'; const querystring = require('querystring'); +const accepts = require('accepts'); const _querycache = Symbol('_querycache'); const _queriesCache = Symbol('_queriesCache'); const PROTOCOL = Symbol('PROTOCOL'); +const ACCEPTS = Symbol('ACCEPTS'); const RE_ARRAY_KEY = /[^\[\]]+\[\]$/; const AJAX_EXT_RE = /\.(json|tile|ajax)$/i; @@ -214,6 +216,15 @@ module.exports = { return this._customQuery(_queriesCache, arrayValue); }, + get accept() { + let accept = this[ACCEPTS]; + if (accept) { + return accept; + } + accept = this[ACCEPTS] = accepts(this.req); + return accept; + }, + /** * Set query-string as an object. * diff --git a/package.json b/package.json index 2567af1d5a..855b9b3180 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "egg-session": "^0.0.2", "egg-static": "^0.1.0", "egg-userrole": "^0.1.0", - "egg-userservice": "^0.1.0", + "egg-userservice": "^1.0.0", "egg-validate": "^0.0.2", "egg-watcher": "^1.0.0", "graceful": "^1.0.1", diff --git a/test/lib/core/loader/load_plugin.test.js b/test/lib/core/loader/load_plugin.test.js index d6bd8d6af1..68cce13ef8 100644 --- a/test/lib/core/loader/load_plugin.test.js +++ b/test/lib/core/loader/load_plugin.test.js @@ -2,17 +2,19 @@ const should = require('should'); const path = require('path'); +const fs = require('fs'); const mm = require('egg-mock'); const AppWorkerLoader = require('../../../../').AppWorkerLoader; const utils = require('../../../utils'); const EGG_BASE = path.join(__dirname, '../../../../'); -describe('test/lib/core/loader/load_plugin.test.js', () => { +describe('test/lib/core/loader.test.js', () => { let app; const logger = console; before(() => { app = utils.app('apps/empty'); + return app.ready(); }); afterEach(mm.restore); @@ -45,7 +47,7 @@ describe('test/lib/core/loader/load_plugin.test.js', () => { env: [], path: path.join(baseDir, 'plugins/e'), }); - appLoader.plugins.onerror.path.should.equal(path.join(EGG_BASE, 'node_modules/egg-onerror')); + appLoader.plugins.onerror.path.should.equal(fs.realpathSync(path.join(EGG_BASE, 'node_modules/egg-onerror'))); appLoader.plugins.onerror.package.should.equal('egg-onerror'); appLoader.plugins.onerror.version.should.match(/\d+\.\d+\.\d+/); appLoader.orderPlugins.should.be.an.Array;