From 629141717e14d839807f2f3e12be148e5d2df622 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Wed, 9 Dec 2015 18:17:50 +0800 Subject: [PATCH] fix: if header sent, don't set the cookie bigpipe will fail --- .travis.yml | 5 +---- index.js | 3 ++- package.json | 9 ++++----- test/index.test.js | 23 ++++++++++++++++++++--- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 06558fa..98f4890 100644 --- a/.travis.yml +++ b/.travis.yml @@ -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: diff --git a/index.js b/index.js index a8ff5b9..8f48034 100644 --- a/index.js +++ b/index.js @@ -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 diff --git a/package.json b/package.json index fc3ead6..afa5b1d 100644 --- a/package.json +++ b/package.json @@ -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": "*", diff --git a/test/index.test.js b/test/index.test.js index 5937d92..7cc7c2c 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -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'),