fix: if header sent, don't set the cookie

bigpipe will fail
master
fengmk2 2015-12-09 18:17:50 +08:00
parent 205a58f270
commit 629141717e
4 changed files with 27 additions and 13 deletions

View File

@ -1,11 +1,8 @@
sudo: false
language: node_js
node_js:
- '5'
- '4'
- '3'
- '2'
- '1'
- '0.12'
script:
- 'npm run test-cov'
after_script:

View File

@ -177,7 +177,8 @@ module.exports = function (app, options) {
locale = defaultLocale;
}
if (cookieLocale !== locale) {
// if header not send, set the locale cookie
if (cookieLocale !== locale && !this.headerSent) {
// locale change, need to set cookie
this.cookies.set(cookieField, locale, {
// make sure brower javascript can read the cookie

View File

@ -7,11 +7,10 @@
"index.js"
],
"scripts": {
"test": "eslint . && mocha --harmony --check-leaks -R spec -t 5000 test/*.test.js",
"test-cov": "node --harmony node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- --check-leaks -t 5000 test/*.test.js",
"test": "eslint . && mocha --check-leaks -R spec -t 5000 test/*.test.js",
"test-cov": "istanbul cover _mocha -- --check-leaks -t 5000 test/*.test.js",
"lint": "eslint .",
"autod": "autod -w --prefix '~'",
"cnpm": "npm install --registry=https://registry.npm.taobao.org",
"contributors": "contributors -f plain -o AUTHORS"
},
"dependencies": {
@ -25,8 +24,8 @@
"beautify-benchmark": "0",
"benchmark": "1",
"contributors": "*",
"eslint": "~1.5.0",
"istanbul-harmony": "*",
"eslint": "1",
"istanbul": "*",
"koa": "1",
"mm": "1",
"mocha": "*",

View File

@ -1,6 +1,4 @@
/**!
* koa-locales - test/index.test.js
*
/**
* Copyright(c) koajs and other contributors.
* MIT Licensed
*
@ -51,6 +49,16 @@ describe('koa-locales.test.js', function () {
.expect('Set-Cookie', /^locale=en\-us; path=\/; expires=\w+/)
.expect(200, done);
});
it('should not set locale cookie after header sent', function(done) {
request(app.callback())
.get('/headerSent')
.expect('foo')
.expect(200, function(err) {
assert(!err, err && err.message);
setTimeout(done, 50);
});
});
});
describe('custom options', function () {
@ -397,6 +405,15 @@ function createApp(options) {
const fname = options && options.functionName || '__';
app.use(function* () {
if (this.url === '/headerSent') {
this.body = 'foo';
const that = this;
setTimeout(function() {
that[fname]('Email');
}, 10);
return;
}
this.body = {
email: this[fname]('Email'),
name: this[fname]('model.user.fields.name'),