Comparar commits

...

47 Commits

Autor SHA1 Mensagem Data
TJ Holowaychuk e0afda444f Release 3.2.6 2013-06-02 17:15:39 -07:00
TJ Holowaychuk 5a4cac58af update connect 2013-06-02 17:15:14 -07:00
TJ Holowaychuk 545dca6c4d Merge pull request #1642 from jade-bot/master
Update jade files [bot-update#1]
2013-06-02 16:04:50 -07:00
TJ Holowaychuk e59a882389 Merge pull request #1634 from joshlangner/patch-1
added some additional explanation for clarity
2013-06-02 15:58:25 -07:00
TJ Holowaychuk ccd9828535 Merge pull request #1630 from EvanHahn/patch-1
Remove dead link from readme's "More Information"
2013-06-02 15:50:45 -07:00
TJ Holowaychuk 41f0d32355 Merge pull request #1622 from saintedlama/master
Fixes indentation for css engines when using express to scaffold an application
2013-06-02 15:47:36 -07:00
jade-bot cd31cecfd1 Update to maintain compatability with the latest version of jade 2013-05-26 14:51:34 -07:00
TJ Holowaychuk 2fe46b3905 Release 3.2.5 2013-05-21 21:01:24 -07:00
TJ Holowaychuk 24974f1f8f update connect 2013-05-21 20:56:08 -07:00
joshlangner fd73bd006e added some additional explanation for clarity 2013-05-19 22:47:04 -04:00
Evan Hahn 7388c2c223 Remove dead link from readme's "More Information" 2013-05-17 11:37:21 -06:00
TJ Holowaychuk e2210b0b92 Merge pull request #1625 from ForbesLindesay/patch-1
Throw a meaningful error when there is no default engine
2013-05-15 08:27:47 -07:00
Forbes Lindesay 30919be2a0 Throw a meaningful error when there is no default engine 2013-05-15 12:39:06 +01:00
TJ Holowaychuk 10b21b41f7 Revert "fix infinite loop when res.send(status) is undefined. Closes #1623"
This reverts commit 28b8a3b5f7.
2013-05-13 13:23:23 -07:00
TJ Holowaychuk 28b8a3b5f7 fix infinite loop when res.send(status) is undefined. Closes #1623 2013-05-13 13:22:31 -07:00
saintelama 8b2f1bba95 fix indentation for css engine support 2013-05-12 23:43:52 +02:00
TJ Holowaychuk c805d80a9b Merge pull request #1592 from bartsqueezy/eb1bbb9
Removing dependency which is no longer supported
2013-05-11 15:36:39 -07:00
TJ Holowaychuk d876778d22 Merge pull request #1597 from Cauldrath/cookie_version
Version bump for node-cookie
2013-05-11 15:35:30 -07:00
TJ Holowaychuk 412e571600 Merge pull request #1618 from pwmckenna/patch-1
Flush messages exposed to locals *after* the view has the chance to proces...
2013-05-11 15:26:22 -07:00
TJ Holowaychuk 3296ed9cb3 change generation of ETags with res.send() to GET requests only. Closes #1619
if for some reason this is not ideal for your use-case please let me know and comment in the issue
2013-05-10 14:43:59 -07:00
Patrick Williams 91835e6816 Flush messages exposed to locals after the view has the chance to process them. 2013-05-10 09:05:37 -06:00
TJ Holowaychuk f976625281 Release 3.2.4 2013-05-09 09:17:48 -07:00
TJ Holowaychuk 028d9d8a0c Merge pull request #1598 from colynb/patch-1
the file is hosts not vhosts
2013-05-09 09:12:54 -07:00
TJ Holowaychuk 8559c0e2a4 fix req.subdomains when no Host is present 2013-05-09 09:10:52 -07:00
TJ Holowaychuk 06ead58240 fix req.host when no Host is present, return undefined 2013-05-09 09:06:11 -07:00
TJ Holowaychuk 28ca1b5221 add req.host tests 2013-05-09 09:03:52 -07:00
TJ Holowaychuk 6d872e6693 remove qs dep 2013-05-07 07:58:54 -07:00
TJ Holowaychuk 0b09c8981f Release 3.2.3 2013-05-07 07:55:06 -07:00
TJ Holowaychuk a1d5676ecb update connect / qs 2013-05-07 07:54:48 -07:00
TJ Holowaychuk f862ad29f5 Release 3.2.2 2013-05-03 12:54:52 -07:00
TJ Holowaychuk 15496da8fd remove ./client.js 2013-05-03 12:54:28 -07:00
TJ Holowaychuk 802fb1632c update qs 2013-05-03 12:53:50 -07:00
colynb 69453ff889 the file is hosts not vhosts 2013-05-01 16:27:29 -07:00
Benjamin Hanes 28752cc3c0 Version bump for node-cookie 2013-05-01 15:25:14 -04:00
TJ Holowaychuk 9f06d9b03f Release 3.2.1 2013-04-29 19:17:08 -07:00
TJ Holowaychuk 3fb7c4e1db update connect 2013-04-29 19:16:33 -07:00
Steve Bartnesky 5fa685b602 removing github-flavored-markdown as a dependency as it is no longer supported. switch to use marked instead 2013-04-29 09:12:29 -05:00
Steve Bartnesky eb1bbb92c0 removing github-flavored-markdown as a dependency as it is no longer supported. switch to use marked instead 2013-04-29 08:59:52 -05:00
TJ Holowaychuk d0e49f1a8a update qs and remove all ~ semver crap 2013-04-26 13:12:33 -07:00
TJ Holowaychuk ea2664a4b8 Merge branch 'master' of github.com:visionmedia/express 2013-04-25 16:29:50 -07:00
TJ Holowaychuk da6524bd06 Merge pull request #1589 from hacksparrow/master
Signed cookies can now accept numbers as values, like unsigned cookies
2013-04-25 16:29:39 -07:00
TJ Holowaychuk a231406931 Merge branch 'master' of github.com:visionmedia/express 2013-04-25 16:26:44 -07:00
Hack Sparrow 6d39ed8ef7 Accept number as value of Signed Cookie 2013-04-23 22:53:35 +05:30
TJ Holowaychuk f2563f4dde Merge pull request #1586 from yields/master
removed some spaces from bin/express
2013-04-21 18:18:19 -07:00
Amir Abu Shareb 3df265b36a remove spaces when a session is enabled. 2013-04-21 15:41:42 +03:00
TJ Holowaychuk e382e6adc7 update supertest dev dep 2013-04-16 06:49:56 -07:00
TJ Holowaychuk 91c71d6c2e add app.VERB() paths array deprecation warning 2013-04-15 15:18:28 -07:00
22 arquivos alterados com 174 adições e 108 exclusões
+37
Ver Arquivo
@@ -1,4 +1,41 @@
3.2.6 / 2013-06-02
==================
* update connect
3.2.5 / 2013-05-21
==================
* update connect
* update node-cookie
* add: throw a meaningful error when there is no default engine
* change generation of ETags with res.send() to GET requests only. Closes #1619
3.2.4 / 2013-05-09
==================
* fix `req.subdomains` when no Host is present
* fix `req.host` when no Host is present, return undefined
3.2.3 / 2013-05-07
==================
* update connect / qs
3.2.2 / 2013-05-03
==================
* update qs
3.2.1 / 2013-04-29
==================
* add app.VERB() paths array deprecation warning
* update connect
* update qs and remove all ~ semver crap
* fix: accept number as value of Signed Cookie
3.2.0 / 2013-04-15
==================
-1
Ver Arquivo
@@ -64,7 +64,6 @@ app.listen(3000);
* [Google Group](http://groups.google.com/group/express-js) for discussion
* Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates
* Visit the [Wiki](http://github.com/visionmedia/express/wiki)
* [日本語ドキュメンテーション](http://hideyukisaito.com/doc/expressjs/) by [hideyukisaito](https://github.com/hideyukisaito)
* [Русскоязычная документация](http://jsman.ru/express/)
* Run express examples [online](https://runnable.com/express)
+3 -3
Ver Arquivo
@@ -323,10 +323,10 @@ function createApplicationAt(path) {
// CSS Engine support
switch (program.css) {
case 'less':
app = app.replace('{css}', eol + ' app.use(require(\'less-middleware\')({ src: __dirname + \'/public\' }));');
app = app.replace('{css}', eol + 'app.use(require(\'less-middleware\')({ src: __dirname + \'/public\' }));');
break;
case 'stylus':
app = app.replace('{css}', eol + ' app.use(require(\'stylus\').middleware(__dirname + \'/public\'));');
app = app.replace('{css}', eol + 'app.use(require(\'stylus\').middleware(__dirname + \'/public\'));');
break;
default:
app = app.replace('{css}', '');
@@ -334,7 +334,7 @@ function createApplicationAt(path) {
// Session support
app = app.replace('{sess}', program.sessions
? eol + ' app.use(express.cookieParser(\'your secret here\'));' + eol + ' app.use(express.session());'
? eol + 'app.use(express.cookieParser(\'your secret here\'));' + eol + 'app.use(express.session());'
: '');
// Template support
-25
Ver Arquivo
@@ -1,25 +0,0 @@
var http = require('http');
var times = 50;
while (times--) {
var req = http.request({
port: 3000
, method: 'POST'
, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
req.on('response', function(res){
console.log(res.statusCode);
});
var n = 500000;
while (n--) {
req.write('foo=bar&bar=baz&');
}
req.write('foo=bar&bar=baz');
req.end();
}
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
style
style.
body {
padding: 50px;
font: 16px "Helvetica Neue", Helvetica;
+2 -2
Ver Arquivo
@@ -1,7 +1,7 @@
html
head
title Express
script
script.
// call this whatever you like,
// or dump them into individual
// props like "var user ="
@@ -10,5 +10,5 @@ html
h1 Expose client data
p The following was exposed to the client:
pre
script
script.
document.write(JSON.stringify(data, null, 2))
+1 -1
Ver Arquivo
@@ -5,7 +5,7 @@
var express = require('../..')
, fs = require('fs')
, md = require('github-flavored-markdown').parse;
, md = require('marked').parse;
var app = module.exports = express();
+2 -3
Ver Arquivo
@@ -1,4 +1,3 @@
var express = require('../..');
var app = module.exports = express();
@@ -58,10 +57,10 @@ app.use(function(req, res, next){
});
*/
next();
// empty or "flush" the messages so they
// don't build up
req.session.messages = [];
next();
});
// load controllers
@@ -90,4 +89,4 @@ app.use(function(req, res, next){
if (!module.parent) {
app.listen(3000);
console.log('\n listening on port 3000\n');
}
}
+1 -1
Ver Arquivo
@@ -2,7 +2,7 @@
html
head
title Search example
style
style.
body {
font: 14px "Helvetica Neue", Helvetica;
padding: 50px;
+5 -6
Ver Arquivo
@@ -1,4 +1,3 @@
/**
* Module dependencies.
*/
@@ -6,14 +5,14 @@
var express = require('../..');
/*
edit /etc/vhosts:
edit /etc/hosts:
127.0.0.1 foo.example.com
127.0.0.1 bar.example.com
127.0.0.1 example.com
*/
// Main app
// Main server app
var main = express();
@@ -36,12 +35,12 @@ redirect.all('*', function(req, res){
res.redirect('http://example.com:3000/' + req.subdomains[0]);
});
// Main app
// Vhost app
var app = express();
app.use(express.vhost('*.example.com', redirect))
app.use(express.vhost('example.com', main));
app.use(express.vhost('*.example.com', redirect)) // Serves all subdomains via Redirect app
app.use(express.vhost('example.com', main)); // Serves top level domain via Main server app
app.listen(3000);
console.log('Express app started on port 3000');
+1 -1
Ver Arquivo
@@ -6,7 +6,7 @@
var express = require('../../')
, http = require('http')
, GithubView = require('./github-view')
, md = require('github-flavored-markdown').parse;
, md = require('marked').parse;
var app = module.exports = express();
+1 -1
Ver Arquivo
@@ -2,7 +2,7 @@ doctype 5
html
head
title= title
style
style.
body {
padding: 50px;
font: 16px Helvetica, Arial;
+5
Ver Arquivo
@@ -402,6 +402,11 @@ methods.forEach(function(method){
app[method] = function(path){
if ('get' == method && 1 == arguments.length) return this.set(path);
// deprecated
if (Array.isArray(path)) {
console.trace('passing an array to app.VERB() is deprecated and will be removed in 4.0');
}
// if no router attached yet, attach the router
if (!this._usedRouter) this.use(this.router);
+1 -1
Ver Arquivo
@@ -20,7 +20,7 @@ exports = module.exports = createApplication;
* Framework version.
*/
exports.version = '3.2.0';
exports.version = '3.2.5';
/**
* Expose mime.
+2 -1
Ver Arquivo
@@ -445,7 +445,7 @@ req.__defineGetter__('auth', function(){
req.__defineGetter__('subdomains', function(){
var offset = this.app.get('subdomain offset');
return this.get('Host')
return (this.host || '')
.split('.')
.reverse()
.slice(offset);
@@ -473,6 +473,7 @@ req.__defineGetter__('host', function(){
var trustProxy = this.app.get('trust proxy');
var host = trustProxy && this.get('X-Forwarded-Host');
host = host || this.get('Host');
if (!host) return;
return host.split(':')[0];
});
+5 -4
Ver Arquivo
@@ -78,9 +78,9 @@ res.links = function(links){
*/
res.send = function(body){
var req = this.req
, head = 'HEAD' == req.method
, len;
var req = this.req;
var head = 'HEAD' == req.method;
var len;
// allow status / body
if (2 == arguments.length) {
@@ -128,7 +128,7 @@ res.send = function(body){
// ETag support
// TODO: W/ support
if (len > 1024) {
if (len > 1024 && 'GET' == req.method) {
if (!this.get('ETag')) {
this.set('ETag', etag(body));
}
@@ -580,6 +580,7 @@ res.cookie = function(name, val, options){
var secret = this.req.secret;
var signed = options.signed;
if (signed && !secret) throw new Error('connect.cookieParser("secret") required for signed cookies');
if ('number' == typeof val) val = val.toString();
if ('object' == typeof val) val = 'j:' + JSON.stringify(val);
if (signed) val = 's:' + sign(val, secret);
if ('maxAge' in options) {
+1
Ver Arquivo
@@ -38,6 +38,7 @@ function View(name, options) {
var engines = options.engines;
this.defaultEngine = options.defaultEngine;
var ext = this.ext = extname(name);
if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no extension was provided.');
if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine);
this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express);
this.path = this.lookup(name);
+7 -7
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "express",
"description": "Sinatra inspired web development framework",
"version": "3.2.0",
"version": "3.2.6",
"author": "TJ Holowaychuk <tj@vision-media.ca>",
"contributors": [
{
@@ -22,12 +22,12 @@
}
],
"dependencies": {
"connect": "2.7.6",
"connect": "2.7.11",
"commander": "0.6.1",
"range-parser": "0.0.4",
"mkdirp": "~0.3.4",
"cookie": "0.0.5",
"buffer-crc32": "~0.2.1",
"mkdirp": "0.3.4",
"cookie": "0.1.0",
"buffer-crc32": "0.2.1",
"fresh": "0.1.0",
"methods": "0.0.1",
"send": "0.1.0",
@@ -42,8 +42,8 @@
"stylus": "*",
"should": "*",
"connect-redis": "*",
"github-flavored-markdown": "*",
"supertest": "0.0.1"
"marked": "*",
"supertest": "0.6.0"
},
"keywords": [
"express",
+25 -43
Ver Arquivo
@@ -48,7 +48,7 @@ describe('app.router', function(){
calls.push('before');
next();
});
app.use(app.router);
app.use(function(req, res, next){
@@ -68,7 +68,7 @@ describe('app.router', function(){
done();
})
})
it('should be auto .use()d on the first app.VERB() call', function(done){
var app = express();
@@ -78,7 +78,7 @@ describe('app.router', function(){
calls.push('before');
next();
});
app.get('/', function(req, res, next){
calls.push('GET /')
next();
@@ -109,7 +109,7 @@ describe('app.router', function(){
.get('/user/12?foo=bar')
.expect('user', done);
})
it('should populate req.params with the captures', function(done){
var app = express();
@@ -124,24 +124,6 @@ describe('app.router', function(){
.expect('editing user 10', done);
})
})
describe('when given an array', function(){
it('should match all paths in the array', function(done){
var app = express();
app.get(['/one', '/two'], function(req, res){
res.end('works');
});
request(app)
.get('/one')
.expect('works', function() {
request(app)
.get('/two')
.expect('works', done);
});
})
})
describe('case sensitivity', function(){
it('should be disabled by default', function(done){
@@ -155,7 +137,7 @@ describe('app.router', function(){
.get('/USER')
.expect('tj', done);
})
describe('when "case sensitive routing" is enabled', function(){
it('should match identical casing', function(done){
var app = express();
@@ -170,7 +152,7 @@ describe('app.router', function(){
.get('/uSer')
.expect('tj', done);
})
it('should not match otherwise', function(done){
var app = express();
@@ -199,7 +181,7 @@ describe('app.router', function(){
.get('/user/')
.expect('tj', done);
})
describe('when "strict routing" is enabled', function(){
it('should match trailing slashes', function(done){
var app = express();
@@ -214,7 +196,7 @@ describe('app.router', function(){
.get('/user/')
.expect('tj', done);
})
it('should match no slashes', function(done){
var app = express();
@@ -228,7 +210,7 @@ describe('app.router', function(){
.get('/user')
.expect('tj', done);
})
it('should fail when omitting the trailing slash', function(done){
var app = express();
@@ -242,7 +224,7 @@ describe('app.router', function(){
.get('/user')
.expect(404, done);
})
it('should fail when adding the trailing slash', function(done){
var app = express();
@@ -275,7 +257,7 @@ describe('app.router', function(){
.expect(404, done);
});
})
it('should allow literal "."', function(done){
var app = express();
@@ -303,7 +285,7 @@ describe('app.router', function(){
.get('/user/tj.json')
.expect('tj', done);
})
it('should work with several', function(done){
var app = express();
@@ -346,7 +328,7 @@ describe('app.router', function(){
.get('/api/users/0.json')
.expect('users/0.json', done);
})
it('should not be greedy immediately after param', function(done){
var app = express();
@@ -370,7 +352,7 @@ describe('app.router', function(){
.get('/user/122/aaa')
.expect('122', done);
})
it('should span multiple segments', function(done){
var app = express();
@@ -382,7 +364,7 @@ describe('app.router', function(){
.get('/file/javascripts/jquery.js')
.expect('javascripts/jquery.js', done);
})
it('should be optional', function(done){
var app = express();
@@ -394,7 +376,7 @@ describe('app.router', function(){
.get('/file/')
.expect('', done);
})
it('should require a preceeding /', function(done){
var app = express();
@@ -420,7 +402,7 @@ describe('app.router', function(){
.get('/user/tj')
.expect('tj', done);
})
it('should match a single segment only', function(done){
var app = express();
@@ -432,7 +414,7 @@ describe('app.router', function(){
.get('/user/tj/edit')
.expect(404, done);
})
it('should allow several capture groups', function(done){
var app = express();
@@ -459,7 +441,7 @@ describe('app.router', function(){
.get('/user/tj')
.expect('viewing tj', done);
})
it('should populate the capture group', function(done){
var app = express();
@@ -473,7 +455,7 @@ describe('app.router', function(){
.expect('editing tj', done);
})
})
describe('.:name', function(){
it('should denote a format', function(done){
var app = express();
@@ -491,7 +473,7 @@ describe('app.router', function(){
});
})
})
describe('.:name?', function(){
it('should denote an optional format', function(done){
var app = express();
@@ -509,7 +491,7 @@ describe('app.router', function(){
});
})
})
describe('when next() is called', function(){
it('should continue lookup', function(done){
var app = express()
@@ -528,7 +510,7 @@ describe('app.router', function(){
calls.push('/foo');
next();
});
app.get('/foo', function(req, res, next){
calls.push('/foo 2');
res.end('done');
@@ -542,7 +524,7 @@ describe('app.router', function(){
})
})
})
describe('when next(err) is called', function(){
it('should break out of app.router', function(done){
var app = express()
@@ -561,7 +543,7 @@ describe('app.router', function(){
calls.push('/foo');
next(new Error('fail'));
});
app.get('/foo', function(req, res, next){
assert(0);
});
+34
Ver Arquivo
@@ -0,0 +1,34 @@
var express = require('../')
, request = require('./support/http')
, assert = require('assert');
describe('req', function(){
describe('.host', function(){
it('should return the Host when present', function(done){
var app = express();
app.use(function(req, res){
res.end(req.host);
});
request(app)
.post('/')
.set('Host', 'example.com')
.expect('example.com', done);
})
it('should return undefined otherwise', function(done){
var app = express();
app.use(function(req, res){
req.headers.host = null;
res.end(String(req.host));
});
request(app)
.post('/')
.expect('undefined', done);
})
})
})
+15
Ver Arquivo
@@ -34,6 +34,21 @@ describe('req', function(){
})
})
describe('with no host', function(){
it('should return an empty array', function(done){
var app = express();
app.use(function(req, res){
req.headers.host = null;
res.send(req.subdomains);
});
request(app)
.get('/')
.expect('[]', done);
})
})
describe('when subdomain offset is set', function(){
describe('when subdomain offset is zero', function(){
it('should return an array with the whole domain', function(done){
+25 -7
Ver Arquivo
@@ -1,6 +1,7 @@
var express = require('../')
, request = require('./support/http');
, request = require('./support/http')
, assert = require('assert');
describe('res', function(){
describe('.send(null)', function(){
@@ -16,7 +17,7 @@ describe('res', function(){
.expect('', done);
})
})
describe('.send(undefined)', function(){
it('should set body to ""', function(done){
var app = express();
@@ -45,7 +46,7 @@ describe('res', function(){
.expect(201, done);
})
})
describe('.send(code, body)', function(){
it('should set .statusCode and body', function(done){
var app = express();
@@ -107,7 +108,24 @@ describe('res', function(){
.expect('ETag', '"-1498647312"')
.end(done);
})
it('should not set ETag for non-GET/HEAD', function(done){
var app = express();
app.use(function(req, res){
var str = Array(1024 * 2).join('-');
res.send(str);
});
request(app)
.post('/')
.end(function(err, res){
if (err) return done(err);
assert(!res.header.etag, 'has an ETag');
done();
});
})
it('should not override Content-Type', function(done){
var app = express();
@@ -122,7 +140,7 @@ describe('res', function(){
.expect(200, done);
})
})
describe('.send(Buffer)', function(){
it('should send as octet-stream', function(done){
var app = express();
@@ -172,7 +190,7 @@ describe('res', function(){
})
})
})
describe('.send(Object)', function(){
it('should send as application/json', function(done){
var app = express();
@@ -224,7 +242,7 @@ describe('res', function(){
})
})
})
describe('when .statusCode is 304', function(){
it('should strip Content-* fields, Transfer-Encoding field, and body', function(done){
var app = express();