feat: allow custom locale store cookie domain (#33)

* test: use mocha@4
master
fengmk2 2019-04-17 10:43:00 +08:00 committed by GitHub
parent b3c8ab19e5
commit 08037ee0ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 50 additions and 12 deletions

View File

@ -3,7 +3,9 @@ language: node_js
node_js: node_js:
- '4' - '4'
- '6' - '6'
- '7' - '8'
- '10'
- '11'
install: install:
- npm i npminstall && npminstall - npm i npminstall && npminstall
script: script:

View File

@ -46,7 +46,8 @@ Patch locales functions to koa app.
- {String} defaultLocale: default locale. Optional, default is `en-US`. - {String} defaultLocale: default locale. Optional, default is `en-US`.
- {String} queryField: locale field name on query. Optional, default is `locale`. - {String} queryField: locale field name on query. Optional, default is `locale`.
- {String} cookieField: locale field name on cookie. Optional, default is `locale`. - {String} cookieField: locale field name on cookie. Optional, default is `locale`.
- {Object} localeAlias: locale value map. Optional, default is {}. - {String} cookieDomain: domain on cookie. Optional, default is `''`.
- {Object} localeAlias: locale value map. Optional, default is `{}`.
- {String|Number} cookieMaxAge: set locale cookie value max age. Optional, default is `1y`, expired after one year. - {String|Number} cookieMaxAge: set locale cookie value max age. Optional, default is `1y`, expired after one year.
```js ```js

View File

@ -2,7 +2,9 @@ environment:
matrix: matrix:
- nodejs_version: '4' - nodejs_version: '4'
- nodejs_version: '6' - nodejs_version: '6'
- nodejs_version: '7' - nodejs_version: '8'
- nodejs_version: '10'
- nodejs_version: '11'
install: install:
- ps: Install-Product node $env:nodejs_version - ps: Install-Product node $env:nodejs_version
@ -11,6 +13,6 @@ install:
test_script: test_script:
- node --version - node --version
- npm --version - npm --version
- npm run ci - npm run test
build: off build: off

View File

@ -27,6 +27,7 @@ module.exports = function (app, options) {
const defaultLocale = formatLocale(options.defaultLocale); const defaultLocale = formatLocale(options.defaultLocale);
const queryField = options.queryField; const queryField = options.queryField;
const cookieField = options.cookieField; const cookieField = options.cookieField;
const cookieDomain = options.cookieDomain;
const localeAlias = options.localeAlias; const localeAlias = options.localeAlias;
const writeCookie = options.writeCookie; const writeCookie = options.writeCookie;
const cookieMaxAge = ms(options.cookieMaxAge); const cookieMaxAge = ms(options.cookieMaxAge);
@ -194,12 +195,14 @@ module.exports = function (app, options) {
// if header not send, set the locale cookie // if header not send, set the locale cookie
if (writeCookie && cookieLocale !== locale && !this.headerSent) { if (writeCookie && cookieLocale !== locale && !this.headerSent) {
// locale change, need to set cookie // locale change, need to set cookie
this.cookies.set(cookieField, locale, { const cookieOptions = {
// make sure brower javascript can read the cookie // make sure brower javascript can read the cookie
httpOnly: false, httpOnly: false,
maxAge: cookieMaxAge, maxAge: cookieMaxAge,
signed: false, signed: false,
}); domain: cookieDomain,
};
this.cookies.set(cookieField, locale, cookieOptions);
debugSilly('Saved cookie with locale %s', locale); debugSilly('Saved cookie with locale %s', locale);
} }
debug('Locale: %s from %s', locale, localeOrigin); debug('Locale: %s from %s', locale, localeOrigin);

View File

@ -30,7 +30,7 @@
"istanbul": "*", "istanbul": "*",
"koa": "^1.2.4", "koa": "^1.2.4",
"mm": "^2.0.0", "mm": "^2.0.0",
"mocha": "*", "mocha": "4",
"pedding": "^1.1.0", "pedding": "^1.1.0",
"supertest": "^2.0.1" "supertest": "^2.0.1"
}, },
@ -41,8 +41,7 @@
"web": "https://github.com/koajs/locales" "web": "https://github.com/koajs/locales"
}, },
"bugs": { "bugs": {
"url": "https://github.com/koajs/locales/issues", "url": "https://github.com/koajs/locales/issues"
"email": "m@fengmk2.com"
}, },
"keywords": [ "keywords": [
"koa-locales", "koa-locales",
@ -55,8 +54,8 @@
"node": ">=4.0.0" "node": ">=4.0.0"
}, },
"ci": { "ci": {
"version": "4, 6, 7" "version": "4, 6, 8, 10, 11"
}, },
"author": "fengmk2 <m@fengmk2.com> (https://fengmk2.com)", "author": "fengmk2 <fengmk2@gmail.com> (https://fengmk2.com)",
"license": "MIT" "license": "MIT"
} }

View File

@ -35,7 +35,7 @@ describe('koa-locales.test.js', function () {
'gender': 'model.user.fields.gender', 'gender': 'model.user.fields.gender',
'name': 'model.user.fields.name', 'name': 'model.user.fields.name',
}) })
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/) .expect('Set-Cookie', /^locale=en\-us; path=\/; expires=[^;]+ GMT$/)
.expect(200, done); .expect(200, done);
}); });
@ -50,6 +50,37 @@ describe('koa-locales.test.js', function () {
}); });
}); });
describe('options.cookieDomain', function () {
const app = createApp({
cookieDomain: '.foo.com',
});
it('should use default locale: en-US', function (done) {
request(app.callback())
.get('/')
.expect({
email: 'Email',
hello: 'Hello fengmk2, how are you today?',
message: 'Hello fengmk2, how are you today? How was your 18.',
empty: '',
notexists_key: 'key not exists',
empty_string: '',
empty_value: 'emptyValue',
novalue: 'key %s ok',
arguments3: '1 2 3',
arguments4: '1 2 3 4',
arguments5: '1 2 3 4 5',
arguments6: '1 2 3 4 5. 6',
values: 'foo bar foo bar {2} {100}',
object: 'foo bar foo bar {z}',
'gender': 'model.user.fields.gender',
'name': 'model.user.fields.name',
})
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=[^;]+; domain=.foo.com$/)
.expect(200, done);
});
});
describe('custom options', function () { describe('custom options', function () {
const app = createApp({ const app = createApp({
dirs: [__dirname + '/locales', __dirname + '/other-locales'], dirs: [__dirname + '/locales', __dirname + '/other-locales'],