mirror of
https://github.com/zebrajr/express.git
synced 2025-12-06 00:19:48 +01:00
Merge tag '4.17.3'
This commit is contained in:
commit
318fd4b543
13
.github/workflows/ci.yml
vendored
13
.github/workflows/ci.yml
vendored
|
|
@ -27,23 +27,23 @@ jobs:
|
||||||
include:
|
include:
|
||||||
- name: Node.js 4.0
|
- name: Node.js 4.0
|
||||||
node-version: "4.0"
|
node-version: "4.0"
|
||||||
npm-i: mocha@5.2.0 supertest@3.4.2
|
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
|
||||||
|
|
||||||
- name: Node.js 4.x
|
- name: Node.js 4.x
|
||||||
node-version: "4.9"
|
node-version: "4.9"
|
||||||
npm-i: mocha@5.2.0 supertest@3.4.2
|
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
|
||||||
|
|
||||||
- name: Node.js 5.x
|
- name: Node.js 5.x
|
||||||
node-version: "5.12"
|
node-version: "5.12"
|
||||||
npm-i: mocha@5.2.0 supertest@3.4.2
|
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
|
||||||
|
|
||||||
- name: Node.js 6.x
|
- name: Node.js 6.x
|
||||||
node-version: "6.17"
|
node-version: "6.17"
|
||||||
npm-i: mocha@6.2.2
|
npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
|
||||||
|
|
||||||
- name: Node.js 7.x
|
- name: Node.js 7.x
|
||||||
node-version: "7.10"
|
node-version: "7.10"
|
||||||
npm-i: mocha@6.2.2
|
npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
|
||||||
|
|
||||||
- name: Node.js 8.x
|
- name: Node.js 8.x
|
||||||
node-version: "8.17"
|
node-version: "8.17"
|
||||||
|
|
@ -68,7 +68,7 @@ jobs:
|
||||||
node-version: "13.14"
|
node-version: "13.14"
|
||||||
|
|
||||||
- name: Node.js 14.x
|
- name: Node.js 14.x
|
||||||
node-version: "14.18"
|
node-version: "14.19"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
@ -113,6 +113,7 @@ jobs:
|
||||||
echo "node@$(node -v)"
|
echo "node@$(node -v)"
|
||||||
echo "npm@$(npm -v)"
|
echo "npm@$(npm -v)"
|
||||||
npm -s ls ||:
|
npm -s ls ||:
|
||||||
|
(npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print "::set-output name=" $2 "::" $3 }'
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
|
||||||
20
.gitignore
vendored
20
.gitignore
vendored
|
|
@ -1,27 +1,15 @@
|
||||||
# OS X
|
|
||||||
.DS_Store*
|
|
||||||
Icon?
|
|
||||||
._*
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
Thumbs.db
|
|
||||||
ehthumbs.db
|
|
||||||
Desktop.ini
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
.directory
|
|
||||||
*~
|
|
||||||
|
|
||||||
|
|
||||||
# npm
|
# npm
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
*.log
|
*.log
|
||||||
*.gz
|
*.gz
|
||||||
|
|
||||||
|
|
||||||
# Coveralls
|
# Coveralls
|
||||||
|
.nyc_output
|
||||||
coverage
|
coverage
|
||||||
|
|
||||||
# Benchmarking
|
# Benchmarking
|
||||||
benchmarks/graphs
|
benchmarks/graphs
|
||||||
|
|
||||||
|
# ignore additional files using core.excludesFile
|
||||||
|
# https://git-scm.com/docs/gitignore
|
||||||
|
|
|
||||||
20
History.md
20
History.md
|
|
@ -1,3 +1,8 @@
|
||||||
|
5.x
|
||||||
|
===
|
||||||
|
|
||||||
|
This incorporates all changes after 4.17.2 up to 4.17.3.
|
||||||
|
|
||||||
5.0.0-beta.1 / 2022-02-14
|
5.0.0-beta.1 / 2022-02-14
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
|
@ -157,6 +162,21 @@ This is the first Express 5.0 alpha release, based off 4.10.1.
|
||||||
* add:
|
* add:
|
||||||
- `app.router` is a reference to the base router
|
- `app.router` is a reference to the base router
|
||||||
|
|
||||||
|
4.17.3 / 2022-02-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: accepts@~1.3.8
|
||||||
|
- deps: mime-types@~2.1.34
|
||||||
|
- deps: negotiator@0.6.3
|
||||||
|
* deps: body-parser@1.19.2
|
||||||
|
- deps: bytes@3.1.2
|
||||||
|
- deps: qs@6.9.7
|
||||||
|
- deps: raw-body@2.4.3
|
||||||
|
* deps: cookie@0.4.2
|
||||||
|
* deps: qs@6.9.7
|
||||||
|
* Fix handling of `__proto__` keys
|
||||||
|
* pref: remove unnecessary regexp for trust proxy
|
||||||
|
|
||||||
4.17.2 / 2021-12-16
|
4.17.2 / 2021-12-16
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
|
|
||||||
16
appveyor.yml
16
appveyor.yml
|
|
@ -10,7 +10,7 @@ environment:
|
||||||
- nodejs_version: "11.15"
|
- nodejs_version: "11.15"
|
||||||
- nodejs_version: "12.22"
|
- nodejs_version: "12.22"
|
||||||
- nodejs_version: "13.14"
|
- nodejs_version: "13.14"
|
||||||
- nodejs_version: "14.18"
|
- nodejs_version: "14.19"
|
||||||
cache:
|
cache:
|
||||||
- node_modules
|
- node_modules
|
||||||
install:
|
install:
|
||||||
|
|
@ -46,11 +46,25 @@ install:
|
||||||
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 12) {
|
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 12) {
|
||||||
npm install --silent --save-dev mocha@8.4.0
|
npm install --silent --save-dev mocha@8.4.0
|
||||||
}
|
}
|
||||||
|
- ps: |
|
||||||
|
# nyc for test coverage
|
||||||
|
# - use 10.3.2 for Node.js < 4
|
||||||
|
# - use 11.9.0 for Node.js < 6
|
||||||
|
# - use 14.1.1 for Node.js < 8
|
||||||
|
if ([int]$env:nodejs_version.split(".")[0] -lt 4) {
|
||||||
|
npm install --silent --save-dev nyc@10.3.2
|
||||||
|
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 6) {
|
||||||
|
npm install --silent --save-dev nyc@11.9.0
|
||||||
|
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 8) {
|
||||||
|
npm install --silent --save-dev nyc@14.1.1
|
||||||
|
}
|
||||||
- ps: |
|
- ps: |
|
||||||
# supertest for http calls
|
# supertest for http calls
|
||||||
# - use 3.4.2 for Node.js < 6
|
# - use 3.4.2 for Node.js < 6
|
||||||
if ([int]$env:nodejs_version.split(".")[0] -lt 6) {
|
if ([int]$env:nodejs_version.split(".")[0] -lt 6) {
|
||||||
npm install --silent --save-dev supertest@3.4.2
|
npm install --silent --save-dev supertest@3.4.2
|
||||||
|
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 8) {
|
||||||
|
npm install --silent --save-dev supertest@6.1.6
|
||||||
}
|
}
|
||||||
# Update Node.js modules
|
# Update Node.js modules
|
||||||
- ps: |
|
- ps: |
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
@ -59,14 +61,14 @@ function authenticate(name, pass, fn) {
|
||||||
if (!module.parent) console.log('authenticating %s:%s', name, pass);
|
if (!module.parent) console.log('authenticating %s:%s', name, pass);
|
||||||
var user = users[name];
|
var user = users[name];
|
||||||
// query the db for the given username
|
// query the db for the given username
|
||||||
if (!user) return fn(new Error('cannot find user'));
|
if (!user) return fn(null, null)
|
||||||
// apply the same algorithm to the POSTed password, applying
|
// apply the same algorithm to the POSTed password, applying
|
||||||
// the hash against the pass / salt, if there is a match we
|
// the hash against the pass / salt, if there is a match we
|
||||||
// found the user
|
// found the user
|
||||||
hash({ password: pass, salt: user.salt }, function (err, pass, salt, hash) {
|
hash({ password: pass, salt: user.salt }, function (err, pass, salt, hash) {
|
||||||
if (err) return fn(err);
|
if (err) return fn(err);
|
||||||
if (hash === user.hash) return fn(null, user)
|
if (hash === user.hash) return fn(null, user)
|
||||||
fn(new Error('invalid password'));
|
fn(null, null)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,9 +101,10 @@ app.get('/login', function(req, res){
|
||||||
res.render('login');
|
res.render('login');
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/login', function(req, res){
|
app.post('/login', function (req, res, next) {
|
||||||
if (!req.body) return res.sendStatus(400)
|
if (!req.body) return res.sendStatus(400)
|
||||||
authenticate(req.body.username, req.body.password, function(err, user){
|
authenticate(req.body.username, req.body.password, function(err, user){
|
||||||
|
if (err) return next(err)
|
||||||
if (user) {
|
if (user) {
|
||||||
// Regenerate session when signing in
|
// Regenerate session when signing in
|
||||||
// to prevent fixation
|
// to prevent fixation
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var users = [];
|
var users = [];
|
||||||
|
|
||||||
users.push({ name: 'Tobi' });
|
users.push({ name: 'Tobi' });
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../../');
|
var express = require('../../');
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
var users = require('./db');
|
var users = require('./db');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var users = require('./db');
|
var users = require('./db');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,18 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../../');
|
var express = require('../../');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
var resolvePath = require('resolve-path')
|
||||||
|
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
|
|
||||||
|
// path to where the files are stored on disk
|
||||||
|
var FILES_DIR = path.join(__dirname, 'files')
|
||||||
|
|
||||||
app.get('/', function(req, res){
|
app.get('/', function(req, res){
|
||||||
res.send('<ul>' +
|
res.send('<ul>' +
|
||||||
'<li>Download <a href="/files/notes/groceries.txt">notes/groceries.txt</a>.</li>' +
|
'<li>Download <a href="/files/notes/groceries.txt">notes/groceries.txt</a>.</li>' +
|
||||||
|
|
@ -18,7 +25,7 @@ app.get('/', function(req, res){
|
||||||
// /files/* is accessed via req.params[0]
|
// /files/* is accessed via req.params[0]
|
||||||
// but here we name it :file
|
// but here we name it :file
|
||||||
app.get('/files/:file+', function (req, res, next) {
|
app.get('/files/:file+', function (req, res, next) {
|
||||||
var filePath = path.join(__dirname, 'files', req.params.file);
|
var filePath = resolvePath(FILES_DIR, req.params.file)
|
||||||
|
|
||||||
res.download(filePath, function (err) {
|
res.download(filePath, function (err) {
|
||||||
if (!err) return; // file sent
|
if (!err) return; // file sent
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../../');
|
var express = require('../../');
|
||||||
|
|
||||||
var app = express();
|
var app = module.exports = express()
|
||||||
|
|
||||||
app.get('/', function(req, res){
|
app.get('/', function(req, res){
|
||||||
res.send('Hello World');
|
res.send('Hello World');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../../..');
|
var express = require('../../..');
|
||||||
|
|
||||||
var apiv1 = express.Router();
|
var apiv1 = express.Router();
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../../..');
|
var express = require('../../..');
|
||||||
|
|
||||||
var apiv2 = express.Router();
|
var apiv2 = express.Router();
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../..');
|
var express = require('../..');
|
||||||
|
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
exports.index = function(req, res){
|
exports.index = function(req, res){
|
||||||
res.redirect('/users');
|
res.redirect('/users');
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// faux database
|
// faux database
|
||||||
|
|
||||||
var pets = exports.pets = [];
|
var pets = exports.pets = [];
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// install redis first:
|
// install redis first:
|
||||||
// https://redis.io/
|
// https://redis.io/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// Fake posts database
|
// Fake posts database
|
||||||
|
|
||||||
var posts = [
|
var posts = [
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
exports.index = function(req, res){
|
exports.index = function(req, res){
|
||||||
res.render('index', { title: 'Route Separation Example' });
|
res.render('index', { title: 'Route Separation Example' });
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// Fake user database
|
// Fake user database
|
||||||
|
|
||||||
var users = [
|
var users = [
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// install redis first:
|
// install redis first:
|
||||||
// https://redis.io/
|
// https://redis.io/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var search = document.querySelector('[type=search]');
|
var search = document.querySelector('[type=search]');
|
||||||
var code = document.querySelector('pre');
|
var code = document.querySelector('pre');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
// install redis first:
|
// install redis first:
|
||||||
// https://redis.io/
|
// https://redis.io/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
module.exports = User;
|
module.exports = User;
|
||||||
|
|
||||||
// faux model
|
// faux model
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
@ -32,7 +34,7 @@ app.use('/api', function(req, res, next){
|
||||||
if (!key) return next(error(400, 'api key required'));
|
if (!key) return next(error(400, 'api key required'));
|
||||||
|
|
||||||
// key is invalid
|
// key is invalid
|
||||||
if (!~apiKeys.indexOf(key)) return next(error(401, 'invalid api key'));
|
if (apiKeys.indexOf(key) === -1) return next(error(401, 'invalid api key'))
|
||||||
|
|
||||||
// all good, store req.key for route access
|
// all good, store req.key for route access
|
||||||
req.key = key;
|
req.key = key;
|
||||||
|
|
|
||||||
|
|
@ -389,7 +389,7 @@ res.sendFile = function sendFile(path, options, callback) {
|
||||||
* Optionally providing an alternate attachment `filename`,
|
* Optionally providing an alternate attachment `filename`,
|
||||||
* and optional callback `callback(err)`. The callback is invoked
|
* and optional callback `callback(err)`. The callback is invoked
|
||||||
* when the data transfer is complete, or when an error has
|
* when the data transfer is complete, or when an error has
|
||||||
* ocurred. Be sure to check `res.headersSent` if you plan to respond.
|
* occurred. Be sure to check `res.headersSent` if you plan to respond.
|
||||||
*
|
*
|
||||||
* Optionally providing an `options` object to use with `res.sendFile()`.
|
* Optionally providing an `options` object to use with `res.sendFile()`.
|
||||||
* This function will set the `Content-Disposition` header, overriding
|
* This function will set the `Content-Disposition` header, overriding
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,8 @@ exports.compileTrust = function(val) {
|
||||||
|
|
||||||
if (typeof val === 'string') {
|
if (typeof val === 'string') {
|
||||||
// Support comma-separated values
|
// Support comma-separated values
|
||||||
val = val.split(/ *, */);
|
val = val.split(',')
|
||||||
|
.map(function (v) { return v.trim() })
|
||||||
}
|
}
|
||||||
|
|
||||||
return proxyaddr.compile(val || []);
|
return proxyaddr.compile(val || []);
|
||||||
|
|
|
||||||
17
package.json
17
package.json
|
|
@ -33,7 +33,7 @@
|
||||||
"body-parser": "2.0.0-beta.1",
|
"body-parser": "2.0.0-beta.1",
|
||||||
"content-disposition": "0.5.4",
|
"content-disposition": "0.5.4",
|
||||||
"content-type": "~1.0.4",
|
"content-type": "~1.0.4",
|
||||||
"cookie": "0.4.1",
|
"cookie": "0.4.2",
|
||||||
"cookie-signature": "1.0.6",
|
"cookie-signature": "1.0.6",
|
||||||
"debug": "3.1.0",
|
"debug": "3.1.0",
|
||||||
"depd": "~1.1.2",
|
"depd": "~1.1.2",
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
"parseurl": "~1.3.3",
|
"parseurl": "~1.3.3",
|
||||||
"path-is-absolute": "1.0.1",
|
"path-is-absolute": "1.0.1",
|
||||||
"proxy-addr": "~2.0.7",
|
"proxy-addr": "~2.0.7",
|
||||||
"qs": "6.9.6",
|
"qs": "6.9.7",
|
||||||
"range-parser": "~1.2.1",
|
"range-parser": "~1.2.1",
|
||||||
"router": "2.0.0-beta.1",
|
"router": "2.0.0-beta.1",
|
||||||
"safe-buffer": "5.2.1",
|
"safe-buffer": "5.2.1",
|
||||||
|
|
@ -70,15 +70,16 @@
|
||||||
"eslint": "7.32.0",
|
"eslint": "7.32.0",
|
||||||
"express-session": "1.17.2",
|
"express-session": "1.17.2",
|
||||||
"hbs": "4.2.0",
|
"hbs": "4.2.0",
|
||||||
"istanbul": "0.4.5",
|
|
||||||
"marked": "0.7.0",
|
"marked": "0.7.0",
|
||||||
"method-override": "3.0.0",
|
"method-override": "3.0.0",
|
||||||
"mocha": "9.1.3",
|
"mocha": "9.2.0",
|
||||||
"morgan": "1.10.0",
|
"morgan": "1.10.0",
|
||||||
"multiparty": "4.2.2",
|
"multiparty": "4.2.3",
|
||||||
|
"nyc": "15.1.0",
|
||||||
"pbkdf2-password": "1.2.1",
|
"pbkdf2-password": "1.2.1",
|
||||||
|
"resolve-path": "1.4.0",
|
||||||
"should": "13.2.3",
|
"should": "13.2.3",
|
||||||
"supertest": "6.1.6",
|
"supertest": "6.2.2",
|
||||||
"vhost": "~3.0.2"
|
"vhost": "~3.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
@ -94,8 +95,8 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
|
"test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
|
||||||
"test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
|
"test-ci": "nyc --reporter=lcovonly --reporter=text npm test",
|
||||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
|
"test-cov": "nyc --reporter=html --reporter=text npm test",
|
||||||
"test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
|
"test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var after = require('after');
|
var after = require('after');
|
||||||
var should = require('should');
|
var should = require('should');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var after = require('after');
|
var after = require('after');
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ describe('auth', function(){
|
||||||
.expect(200, /<form/, done)
|
.expect(200, /<form/, done)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should display login error', function(done){
|
it('should display login error for bad user', function (done) {
|
||||||
request(app)
|
request(app)
|
||||||
.post('/login')
|
.post('/login')
|
||||||
.type('urlencoded')
|
.type('urlencoded')
|
||||||
|
|
@ -36,6 +36,21 @@ describe('auth', function(){
|
||||||
.expect(200, /Authentication failed/, done)
|
.expect(200, /Authentication failed/, done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should display login error for bad password', function (done) {
|
||||||
|
request(app)
|
||||||
|
.post('/login')
|
||||||
|
.type('urlencoded')
|
||||||
|
.send('username=tj&password=nogood')
|
||||||
|
.expect('Location', '/login')
|
||||||
|
.expect(302, function (err, res) {
|
||||||
|
if (err) return done(err)
|
||||||
|
request(app)
|
||||||
|
.get('/login')
|
||||||
|
.set('Cookie', getCookie(res))
|
||||||
|
.expect(200, /Authentication failed/, done)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('GET /logout',function(){
|
describe('GET /logout',function(){
|
||||||
|
|
|
||||||
|
|
@ -36,4 +36,12 @@ describe('downloads', function(){
|
||||||
.expect(404, done)
|
.expect(404, done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('GET /files/../index.js', function () {
|
||||||
|
it('should respond with 403', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/files/../index.js')
|
||||||
|
.expect(403, done)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
21
test/acceptance/hello-world.js
Normal file
21
test/acceptance/hello-world.js
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
var app = require('../../examples/hello-world')
|
||||||
|
var request = require('supertest')
|
||||||
|
|
||||||
|
describe('hello-world', function () {
|
||||||
|
describe('GET /', function () {
|
||||||
|
it('should respond with hello world', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'Hello World', done)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('GET /missing', function () {
|
||||||
|
it('should respond with 404', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/missing')
|
||||||
|
.expect(404, done)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var after = require('after')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
describe('app.all()', function(){
|
describe('app.all()', function(){
|
||||||
it('should add a router per method', function(done){
|
it('should add a router per method', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
app.all('/tobi', function(req, res){
|
app.all('/tobi', function(req, res){
|
||||||
res.end(req.method);
|
res.end(req.method);
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.put('/tobi')
|
.put('/tobi')
|
||||||
.expect('PUT', function(){
|
.expect(200, 'PUT', cb)
|
||||||
request(app)
|
|
||||||
|
request(app)
|
||||||
.get('/tobi')
|
.get('/tobi')
|
||||||
.expect('GET', done);
|
.expect(200, 'GET', cb)
|
||||||
});
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should run the callback for a method just once', function(done){
|
it('should run the callback for a method just once', function(done){
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var assert = require('assert')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, fs = require('fs');
|
, fs = require('fs');
|
||||||
var path = require('path')
|
var path = require('path')
|
||||||
|
|
@ -22,16 +24,16 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.html', function(err, str){
|
app.render('user.html', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should throw when the callback is missing', function(){
|
it('should throw when the callback is missing', function(){
|
||||||
var app = express();
|
var app = express();
|
||||||
(function(){
|
assert.throws(function () {
|
||||||
app.engine('.html', null);
|
app.engine('.html', null);
|
||||||
}).should.throw('callback function required');
|
}, /callback function required/)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should work without leading "."', function(done){
|
it('should work without leading "."', function(done){
|
||||||
|
|
@ -43,7 +45,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.html', function(err, str){
|
app.render('user.html', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -58,7 +60,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user', function(err, str){
|
app.render('user', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -73,7 +75,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user', function(err, str){
|
app.render('user', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../');
|
var express = require('../');
|
||||||
var request = require('supertest');
|
var request = require('supertest');
|
||||||
|
|
@ -46,23 +47,20 @@ describe('HEAD', function(){
|
||||||
describe('app.head()', function(){
|
describe('app.head()', function(){
|
||||||
it('should override', function(done){
|
it('should override', function(done){
|
||||||
var app = express()
|
var app = express()
|
||||||
, called;
|
|
||||||
|
|
||||||
app.head('/tobi', function(req, res){
|
app.head('/tobi', function(req, res){
|
||||||
called = true;
|
res.header('x-method', 'head')
|
||||||
res.end('');
|
res.end()
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/tobi', function(req, res){
|
app.get('/tobi', function(req, res){
|
||||||
assert(0, 'should not call GET');
|
res.header('x-method', 'get')
|
||||||
res.send('tobi');
|
res.send('tobi');
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.head('/tobi')
|
.head('/tobi')
|
||||||
.expect(200, function(){
|
.expect('x-method', 'head')
|
||||||
assert(called);
|
.expect(200, done)
|
||||||
done();
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
58
test/app.js
58
test/app.js
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var express = require('..')
|
var express = require('..')
|
||||||
|
|
@ -32,8 +33,8 @@ describe('app.parent', function(){
|
||||||
blog.use('/admin', blogAdmin);
|
blog.use('/admin', blogAdmin);
|
||||||
|
|
||||||
assert(!app.parent, 'app.parent');
|
assert(!app.parent, 'app.parent');
|
||||||
blog.parent.should.equal(app);
|
assert.strictEqual(blog.parent, app)
|
||||||
blogAdmin.parent.should.equal(blog);
|
assert.strictEqual(blogAdmin.parent, blog)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -48,10 +49,10 @@ describe('app.mountpath', function(){
|
||||||
app.use(fallback);
|
app.use(fallback);
|
||||||
blog.use('/admin', admin);
|
blog.use('/admin', admin);
|
||||||
|
|
||||||
admin.mountpath.should.equal('/admin');
|
assert.strictEqual(admin.mountpath, '/admin')
|
||||||
app.mountpath.should.equal('/');
|
assert.strictEqual(app.mountpath, '/')
|
||||||
blog.mountpath.should.equal('/blog');
|
assert.strictEqual(blog.mountpath, '/blog')
|
||||||
fallback.mountpath.should.equal('/');
|
assert.strictEqual(fallback.mountpath, '/')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -64,35 +65,56 @@ describe('app.path()', function(){
|
||||||
app.use('/blog', blog);
|
app.use('/blog', blog);
|
||||||
blog.use('/admin', blogAdmin);
|
blog.use('/admin', blogAdmin);
|
||||||
|
|
||||||
app.path().should.equal('');
|
assert.strictEqual(app.path(), '')
|
||||||
blog.path().should.equal('/blog');
|
assert.strictEqual(blog.path(), '/blog')
|
||||||
blogAdmin.path().should.equal('/blog/admin');
|
assert.strictEqual(blogAdmin.path(), '/blog/admin')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('in development', function(){
|
describe('in development', function(){
|
||||||
|
before(function () {
|
||||||
|
this.env = process.env.NODE_ENV
|
||||||
|
process.env.NODE_ENV = 'development'
|
||||||
|
})
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
process.env.NODE_ENV = this.env
|
||||||
|
})
|
||||||
|
|
||||||
it('should disable "view cache"', function(){
|
it('should disable "view cache"', function(){
|
||||||
process.env.NODE_ENV = 'development';
|
|
||||||
var app = express();
|
var app = express();
|
||||||
app.enabled('view cache').should.be.false()
|
assert.ok(!app.enabled('view cache'))
|
||||||
process.env.NODE_ENV = 'test';
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('in production', function(){
|
describe('in production', function(){
|
||||||
|
before(function () {
|
||||||
|
this.env = process.env.NODE_ENV
|
||||||
|
process.env.NODE_ENV = 'production'
|
||||||
|
})
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
process.env.NODE_ENV = this.env
|
||||||
|
})
|
||||||
|
|
||||||
it('should enable "view cache"', function(){
|
it('should enable "view cache"', function(){
|
||||||
process.env.NODE_ENV = 'production';
|
|
||||||
var app = express();
|
var app = express();
|
||||||
app.enabled('view cache').should.be.true()
|
assert.ok(app.enabled('view cache'))
|
||||||
process.env.NODE_ENV = 'test';
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('without NODE_ENV', function(){
|
describe('without NODE_ENV', function(){
|
||||||
|
before(function () {
|
||||||
|
this.env = process.env.NODE_ENV
|
||||||
|
process.env.NODE_ENV = ''
|
||||||
|
})
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
process.env.NODE_ENV = this.env
|
||||||
|
})
|
||||||
|
|
||||||
it('should default to development', function(){
|
it('should default to development', function(){
|
||||||
process.env.NODE_ENV = '';
|
|
||||||
var app = express();
|
var app = express();
|
||||||
app.get('env').should.equal('development');
|
assert.strictEqual(app.get('env'), 'development')
|
||||||
process.env.NODE_ENV = 'test';
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,19 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var assert = require('assert')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
|
var should = require('should')
|
||||||
|
|
||||||
describe('app', function(){
|
describe('app', function(){
|
||||||
describe('.locals(obj)', function(){
|
describe('.locals(obj)', function(){
|
||||||
it('should merge locals', function(){
|
it('should merge locals', function(){
|
||||||
var app = express();
|
var app = express();
|
||||||
Object.keys(app.locals).should.eql(['settings']);
|
should(Object.keys(app.locals)).eql(['settings'])
|
||||||
app.locals.user = 'tobi';
|
app.locals.user = 'tobi';
|
||||||
app.locals.age = 2;
|
app.locals.age = 2;
|
||||||
Object.keys(app.locals).should.eql(['settings', 'user', 'age']);
|
should(Object.keys(app.locals)).eql(['settings', 'user', 'age'])
|
||||||
app.locals.user.should.equal('tobi');
|
assert.strictEqual(app.locals.user, 'tobi')
|
||||||
app.locals.age.should.equal(2);
|
assert.strictEqual(app.locals.age, 2)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -19,8 +22,8 @@ describe('app', function(){
|
||||||
var app = express();
|
var app = express();
|
||||||
app.set('title', 'House of Manny');
|
app.set('title', 'House of Manny');
|
||||||
var obj = app.locals.settings;
|
var obj = app.locals.settings;
|
||||||
obj.should.have.property('env', 'test');
|
should(obj).have.property('env', 'test')
|
||||||
obj.should.have.property('title', 'House of Manny');
|
should(obj).have.property('title', 'House of Manny')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
@ -16,24 +17,22 @@ describe('app', function(){
|
||||||
|
|
||||||
app.get('/post/:id', function(req, res){
|
app.get('/post/:id', function(req, res){
|
||||||
var id = req.params.id;
|
var id = req.params.id;
|
||||||
id.should.be.a.Number()
|
res.send((typeof id) + ':' + id)
|
||||||
res.send('' + id);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/user/:uid', function(req, res){
|
app.get('/user/:uid', function(req, res){
|
||||||
var id = req.params.id;
|
var id = req.params.id;
|
||||||
id.should.be.a.Number()
|
res.send((typeof id) + ':' + id)
|
||||||
res.send('' + id);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/user/123')
|
.get('/user/123')
|
||||||
.expect(200, '123', function (err) {
|
.expect(200, 'number:123', function (err) {
|
||||||
if (err) return done(err)
|
if (err) return done(err)
|
||||||
request(app)
|
request(app)
|
||||||
.get('/post/123')
|
.get('/post/123')
|
||||||
.expect('123', done);
|
.expect('number:123', done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -50,13 +49,12 @@ describe('app', function(){
|
||||||
|
|
||||||
app.get('/user/:id', function(req, res){
|
app.get('/user/:id', function(req, res){
|
||||||
var id = req.params.id;
|
var id = req.params.id;
|
||||||
id.should.be.a.Number()
|
res.send((typeof id) + ':' + id)
|
||||||
res.send('' + id);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/user/123')
|
.get('/user/123')
|
||||||
.expect('123', done);
|
.expect(200, 'number:123', done)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should only call once per request', function(done) {
|
it('should only call once per request', function(done) {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var express = require('..');
|
var express = require('..');
|
||||||
|
|
@ -13,7 +14,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render(path.join(__dirname, 'fixtures', 'user.tmpl'), function (err, str) {
|
app.render(path.join(__dirname, 'fixtures', 'user.tmpl'), function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -26,7 +27,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render(path.join(__dirname, 'fixtures', 'user'), function (err, str) {
|
app.render(path.join(__dirname, 'fixtures', 'user'), function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -39,7 +40,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', function (err, str) {
|
app.render('user.tmpl', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -52,7 +53,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('blog/post', function (err, str) {
|
app.render('blog/post', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<h1>blog post</h1>');
|
assert.strictEqual(str, '<h1>blog post</h1>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -72,8 +73,8 @@ describe('app', function(){
|
||||||
app.set('view', View);
|
app.set('view', View);
|
||||||
|
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
err.should.be.ok()
|
assert.ok(err)
|
||||||
err.message.should.equal('err!');
|
assert.strictEqual(err.message, 'err!')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -113,7 +114,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('email.tmpl', function (err, str) {
|
app.render('email.tmpl', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>This is an email</p>');
|
assert.strictEqual(str, '<p>This is an email</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -128,7 +129,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('email', function(err, str){
|
app.render('email', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>This is an email</p>');
|
assert.strictEqual(str, '<p>This is an email</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -143,7 +144,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', function (err, str) {
|
app.render('user.tmpl', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -161,7 +162,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', function (err, str) {
|
app.render('user.tmpl', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<span>tobi</span>');
|
assert.strictEqual(str, '<span>tobi</span>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -178,7 +179,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('name.tmpl', function (err, str) {
|
app.render('name.tmpl', function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -219,7 +220,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -245,12 +246,12 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(1);
|
assert.strictEqual(count, 1)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(2);
|
assert.strictEqual(count, 2)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -275,12 +276,12 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(1);
|
assert.strictEqual(count, 1)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
app.render('something', function(err, str){
|
app.render('something', function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(1);
|
assert.strictEqual(count, 1)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -298,7 +299,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', { user: user }, function (err, str) {
|
app.render('user.tmpl', { user: user }, function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -311,7 +312,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', {}, function (err, str) {
|
app.render('user.tmpl', {}, function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>tobi</p>');
|
assert.strictEqual(str, '<p>tobi</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -325,7 +326,7 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('user.tmpl', { user: jane }, function (err, str) {
|
app.render('user.tmpl', { user: jane }, function (err, str) {
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
str.should.equal('<p>jane</p>');
|
assert.strictEqual(str, '<p>jane</p>')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -350,12 +351,12 @@ describe('app', function(){
|
||||||
|
|
||||||
app.render('something', {cache: true}, function(err, str){
|
app.render('something', {cache: true}, function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(1);
|
assert.strictEqual(count, 1)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
app.render('something', {cache: true}, function(err, str){
|
app.render('something', {cache: true}, function(err, str){
|
||||||
if (err) return done(err);
|
if (err) return done(err);
|
||||||
count.should.equal(1);
|
assert.strictEqual(count, 1)
|
||||||
str.should.equal('abstract engine');
|
assert.strictEqual(str, 'abstract engine')
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var after = require('after')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
|
|
@ -19,5 +21,123 @@ describe('app', function(){
|
||||||
.get('/foo?name=tobi')
|
.get('/foo?name=tobi')
|
||||||
.expect('name=tobi', done);
|
.expect('name=tobi', done);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should only extend for the referenced app', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.request.foobar = function () {
|
||||||
|
return 'tobi'
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'tobi', cb)
|
||||||
|
|
||||||
|
request(app2)
|
||||||
|
.get('/')
|
||||||
|
.expect(500, /(?:not a function|has no method)/, cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should inherit to sub apps', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.request.foobar = function () {
|
||||||
|
return 'tobi'
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'tobi', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'tobi', cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should allow sub app to override', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.request.foobar = function () {
|
||||||
|
return 'tobi'
|
||||||
|
}
|
||||||
|
|
||||||
|
app2.request.foobar = function () {
|
||||||
|
return 'loki'
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'tobi', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'loki', cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not pollute parent app', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.request.foobar = function () {
|
||||||
|
return 'tobi'
|
||||||
|
}
|
||||||
|
|
||||||
|
app2.request.foobar = function () {
|
||||||
|
return 'loki'
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/sub/foo', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.send(req.foobar())
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'loki', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub/foo')
|
||||||
|
.expect(200, 'tobi', cb)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var after = require('after')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
|
|
@ -20,25 +22,122 @@ describe('app', function(){
|
||||||
.expect('HEY', done);
|
.expect('HEY', done);
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should not be influenced by other app protos', function(done){
|
it('should only extend for the referenced app', function (done) {
|
||||||
var app = express()
|
var app1 = express()
|
||||||
, app2 = express();
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
app.response.shout = function(str){
|
app1.response.shout = function (str) {
|
||||||
this.send(str.toUpperCase());
|
this.send(str.toUpperCase())
|
||||||
};
|
}
|
||||||
|
|
||||||
app2.response.shout = function(str){
|
app1.get('/', function (req, res) {
|
||||||
this.send(str);
|
res.shout('foo')
|
||||||
};
|
})
|
||||||
|
|
||||||
app.use(function(req, res){
|
app2.get('/', function (req, res) {
|
||||||
res.shout('hey');
|
res.shout('foo')
|
||||||
});
|
})
|
||||||
|
|
||||||
request(app)
|
request(app1)
|
||||||
.get('/')
|
.get('/')
|
||||||
.expect('HEY', done);
|
.expect(200, 'FOO', cb)
|
||||||
|
|
||||||
|
request(app2)
|
||||||
|
.get('/')
|
||||||
|
.expect(500, /(?:not a function|has no method)/, cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should inherit to sub apps', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.response.shout = function (str) {
|
||||||
|
this.send(str.toUpperCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'FOO', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'FOO', cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should allow sub app to override', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.response.shout = function (str) {
|
||||||
|
this.send(str.toUpperCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
app2.response.shout = function (str) {
|
||||||
|
this.send(str + '!')
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/')
|
||||||
|
.expect(200, 'FOO', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'foo!', cb)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not pollute parent app', function (done) {
|
||||||
|
var app1 = express()
|
||||||
|
var app2 = express()
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
|
app1.response.shout = function (str) {
|
||||||
|
this.send(str.toUpperCase())
|
||||||
|
}
|
||||||
|
|
||||||
|
app2.response.shout = function (str) {
|
||||||
|
this.send(str + '!')
|
||||||
|
}
|
||||||
|
|
||||||
|
app1.use('/sub', app2)
|
||||||
|
|
||||||
|
app1.get('/sub/foo', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
app2.get('/', function (req, res) {
|
||||||
|
res.shout('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub')
|
||||||
|
.expect(200, 'foo!', cb)
|
||||||
|
|
||||||
|
request(app1)
|
||||||
|
.get('/sub/foo')
|
||||||
|
.expect(200, 'FOO', cb)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../');
|
var express = require('../');
|
||||||
var request = require('supertest');
|
var request = require('supertest');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var after = require('after');
|
var after = require('after');
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
|
|
@ -759,36 +760,38 @@ describe('app.router', function(){
|
||||||
describe('.:name', function(){
|
describe('.:name', function(){
|
||||||
it('should denote a format', function(done){
|
it('should denote a format', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
app.get('/:name.:format', function(req, res){
|
app.get('/:name.:format', function(req, res){
|
||||||
res.end(req.params.name + ' as ' + req.params.format);
|
res.end(req.params.name + ' as ' + req.params.format);
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/foo.json')
|
.get('/foo.json')
|
||||||
.expect('foo as json', function(){
|
.expect(200, 'foo as json', cb)
|
||||||
request(app)
|
|
||||||
|
request(app)
|
||||||
.get('/foo')
|
.get('/foo')
|
||||||
.expect(404, done);
|
.expect(404, cb)
|
||||||
});
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('.:name?', function(){
|
describe('.:name?', function(){
|
||||||
it('should denote an optional format', function(done){
|
it('should denote an optional format', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
app.get('/:name.:format?', function(req, res){
|
app.get('/:name.:format?', function(req, res){
|
||||||
res.end(req.params.name + ' as ' + (req.params.format || 'html'));
|
res.end(req.params.name + ' as ' + (req.params.format || 'html'));
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/foo')
|
.get('/foo')
|
||||||
.expect('foo as html', function(){
|
.expect(200, 'foo as html', cb)
|
||||||
request(app)
|
|
||||||
|
request(app)
|
||||||
.get('/foo.json')
|
.get('/foo.json')
|
||||||
.expect('foo as json', done);
|
.expect(200, 'foo as json', done)
|
||||||
});
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1130,6 +1133,6 @@ describe('app.router', function(){
|
||||||
|
|
||||||
it('should be chainable', function(){
|
it('should be chainable', function(){
|
||||||
var app = express();
|
var app = express();
|
||||||
app.get('/', function(){}).should.equal(app);
|
assert.strictEqual(app.get('/', function () {}), app)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var assert = require('assert')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
|
|
@ -34,20 +37,20 @@ describe('app', function(){
|
||||||
next();
|
next();
|
||||||
}, function(err, req, res, next){
|
}, function(err, req, res, next){
|
||||||
b = true;
|
b = true;
|
||||||
err.message.should.equal('fabricated error');
|
assert.strictEqual(err.message, 'fabricated error')
|
||||||
next(err);
|
next(err);
|
||||||
}, function(err, req, res, next){
|
}, function(err, req, res, next){
|
||||||
c = true;
|
c = true;
|
||||||
err.message.should.equal('fabricated error');
|
assert.strictEqual(err.message, 'fabricated error')
|
||||||
next();
|
next();
|
||||||
}, function(err, req, res, next){
|
}, function(err, req, res, next){
|
||||||
d = true;
|
d = true;
|
||||||
next();
|
next();
|
||||||
}, function(req, res){
|
}, function(req, res){
|
||||||
a.should.be.false()
|
assert.ok(!a)
|
||||||
b.should.be.true()
|
assert.ok(b)
|
||||||
c.should.be.true()
|
assert.ok(c)
|
||||||
d.should.be.false()
|
assert.ok(!d)
|
||||||
res.sendStatus(204);
|
res.sendStatus(204);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var after = require('after');
|
var after = require('after');
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
|
|
@ -10,7 +11,7 @@ describe('app', function(){
|
||||||
, app = express();
|
, app = express();
|
||||||
|
|
||||||
blog.on('mount', function(arg){
|
blog.on('mount', function(arg){
|
||||||
arg.should.equal(app);
|
assert.strictEqual(arg, app)
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -37,6 +38,7 @@ describe('app', function(){
|
||||||
var blog = express()
|
var blog = express()
|
||||||
, forum = express()
|
, forum = express()
|
||||||
, app = express();
|
, app = express();
|
||||||
|
var cb = after(2, done)
|
||||||
|
|
||||||
blog.get('/', function(req, res){
|
blog.get('/', function(req, res){
|
||||||
res.end('blog');
|
res.end('blog');
|
||||||
|
|
@ -50,12 +52,12 @@ describe('app', function(){
|
||||||
app.use('/forum', forum);
|
app.use('/forum', forum);
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/blog')
|
.get('/blog')
|
||||||
.expect('blog', function(){
|
.expect(200, 'blog', cb)
|
||||||
request(app)
|
|
||||||
|
request(app)
|
||||||
.get('/forum')
|
.get('/forum')
|
||||||
.expect('forum', done);
|
.expect(200, 'forum', done)
|
||||||
});
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should set the child\'s .parent', function(){
|
it('should set the child\'s .parent', function(){
|
||||||
|
|
@ -63,7 +65,7 @@ describe('app', function(){
|
||||||
, app = express();
|
, app = express();
|
||||||
|
|
||||||
app.use('/blog', blog);
|
app.use('/blog', blog);
|
||||||
blog.parent.should.equal(app);
|
assert.strictEqual(blog.parent, app)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should support dynamic routes', function(done){
|
it('should support dynamic routes', function(done){
|
||||||
|
|
@ -102,11 +104,11 @@ describe('app', function(){
|
||||||
});
|
});
|
||||||
|
|
||||||
blog.once('mount', function (parent) {
|
blog.once('mount', function (parent) {
|
||||||
parent.should.equal(app);
|
assert.strictEqual(parent, app)
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
other.once('mount', function (parent) {
|
other.once('mount', function (parent) {
|
||||||
parent.should.equal(app);
|
assert.strictEqual(parent, app)
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var express = require('..');
|
var express = require('..');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var express = require('../');
|
var express = require('../');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var Buffer = require('safe-buffer').Buffer
|
var Buffer = require('safe-buffer').Buffer
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var Buffer = require('safe-buffer').Buffer
|
var Buffer = require('safe-buffer').Buffer
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var Buffer = require('safe-buffer').Buffer
|
var Buffer = require('safe-buffer').Buffer
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var Buffer = require('safe-buffer').Buffer
|
var Buffer = require('safe-buffer').Buffer
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var Buffer = require('safe-buffer').Buffer
|
var Buffer = require('safe-buffer').Buffer
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
var express = require('../');
|
var express = require('../');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,39 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
describe('req', function(){
|
describe('req', function(){
|
||||||
describe('.acceptsEncodings', function () {
|
describe('.acceptsEncodings', function () {
|
||||||
it('should be true if encoding accepted', function(done){
|
it('should return encoding if accepted', function (done) {
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.get('/', function (req, res) {
|
||||||
req.acceptsEncodings('gzip').should.be.ok()
|
res.send({
|
||||||
req.acceptsEncodings('deflate').should.be.ok()
|
gzip: req.acceptsEncodings('gzip'),
|
||||||
res.end();
|
deflate: req.acceptsEncodings('deflate')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/')
|
.get('/')
|
||||||
.set('Accept-Encoding', ' gzip, deflate')
|
.set('Accept-Encoding', ' gzip, deflate')
|
||||||
.expect(200, done);
|
.expect(200, { gzip: 'gzip', deflate: 'deflate' }, done)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should be false if encoding not accepted', function(done){
|
it('should be false if encoding not accepted', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.get('/', function (req, res) {
|
||||||
req.acceptsEncodings('bogus').should.not.be.ok()
|
res.send({
|
||||||
res.end();
|
bogus: req.acceptsEncodings('bogus')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/')
|
.get('/')
|
||||||
.set('Accept-Encoding', ' gzip, deflate')
|
.set('Accept-Encoding', ' gzip, deflate')
|
||||||
.expect(200, done);
|
.expect(200, { bogus: false }, done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,52 +1,56 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
describe('req', function(){
|
describe('req', function(){
|
||||||
describe('.acceptsLanguages', function(){
|
describe('.acceptsLanguages', function(){
|
||||||
it('should be true if language accepted', function(done){
|
it('should return language if accepted', function (done) {
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.get('/', function (req, res) {
|
||||||
req.acceptsLanguages('en-us').should.be.ok()
|
res.send({
|
||||||
req.acceptsLanguages('en').should.be.ok()
|
'en-us': req.acceptsLanguages('en-us'),
|
||||||
res.end();
|
en: req.acceptsLanguages('en')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/')
|
.get('/')
|
||||||
.set('Accept-Language', 'en;q=.5, en-us')
|
.set('Accept-Language', 'en;q=.5, en-us')
|
||||||
.expect(200, done);
|
.expect(200, { 'en-us': 'en-us', en: 'en' }, done)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should be false if language not accepted', function(done){
|
it('should be false if language not accepted', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.get('/', function (req, res) {
|
||||||
req.acceptsLanguages('es').should.not.be.ok()
|
res.send({
|
||||||
res.end();
|
es: req.acceptsLanguages('es')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/')
|
.get('/')
|
||||||
.set('Accept-Language', 'en;q=.5, en-us')
|
.set('Accept-Language', 'en;q=.5, en-us')
|
||||||
.expect(200, done);
|
.expect(200, { es: false }, done)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('when Accept-Language is not present', function(){
|
describe('when Accept-Language is not present', function(){
|
||||||
it('should always return true', function(done){
|
it('should always return language', function (done) {
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.get('/', function (req, res) {
|
||||||
req.acceptsLanguages('en').should.be.ok()
|
res.send({
|
||||||
req.acceptsLanguages('es').should.be.ok()
|
en: req.acceptsLanguages('en'),
|
||||||
req.acceptsLanguages('jp').should.be.ok()
|
es: req.acceptsLanguages('es'),
|
||||||
res.end();
|
jp: req.acceptsLanguages('jp')
|
||||||
});
|
})
|
||||||
|
})
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/')
|
.get('/')
|
||||||
.expect(200, done);
|
.expect(200, { en: 'en', es: 'es', jp: 'jp' }, done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('..')
|
var express = require('..')
|
||||||
var request = require('supertest')
|
var request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest')
|
, request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest')
|
, request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest')
|
, request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
@ -21,7 +22,7 @@ describe('req', function(){
|
||||||
.expect('client', done);
|
.expect('client', done);
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return the addr after trusted proxy', function(done){
|
it('should return the addr after trusted proxy based on count', function (done) {
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.set('trust proxy', 2);
|
app.set('trust proxy', 2);
|
||||||
|
|
@ -36,6 +37,21 @@ describe('req', function(){
|
||||||
.expect('p1', done);
|
.expect('p1', done);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should return the addr after trusted proxy based on list', function (done) {
|
||||||
|
var app = express()
|
||||||
|
|
||||||
|
app.set('trust proxy', '10.0.0.1, 10.0.0.2, 127.0.0.1, ::1')
|
||||||
|
|
||||||
|
app.get('/', function (req, res) {
|
||||||
|
res.send(req.ip)
|
||||||
|
})
|
||||||
|
|
||||||
|
request(app)
|
||||||
|
.get('/')
|
||||||
|
.set('X-Forwarded-For', '10.0.0.2, 10.0.0.3, 10.0.0.1', '10.0.0.4')
|
||||||
|
.expect('10.0.0.3', done)
|
||||||
|
})
|
||||||
|
|
||||||
it('should return the addr after trusted proxy, from sub app', function (done) {
|
it('should return the addr after trusted proxy, from sub app', function (done) {
|
||||||
var app = express();
|
var app = express();
|
||||||
var sub = express();
|
var sub = express();
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('..')
|
var express = require('..')
|
||||||
var request = require('supertest')
|
var request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var assert = require('assert')
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
||||||
|
|
@ -82,7 +84,8 @@ describe('req', function(){
|
||||||
|
|
||||||
describe('when "query parser" an unknown value', function () {
|
describe('when "query parser" an unknown value', function () {
|
||||||
it('should throw', function () {
|
it('should throw', function () {
|
||||||
createApp.bind(null, 'bogus').should.throw(/unknown value.*query parser/);
|
assert.throws(createApp.bind(null, 'bogus'),
|
||||||
|
/unknown value.*query parser/)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('..');
|
var express = require('..');
|
||||||
var request = require('supertest')
|
var request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
@ -8,18 +9,20 @@ describe('req', function(){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.get('/user/:id/:op?', function(req, res, next){
|
app.get('/user/:id/:op?', function(req, res, next){
|
||||||
req.route.path.should.equal('/user/:id/:op?');
|
res.header('path-1', req.route.path)
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/user/:id/edit', function(req, res){
|
app.get('/user/:id/edit', function(req, res){
|
||||||
req.route.path.should.equal('/user/:id/edit');
|
res.header('path-2', req.route.path)
|
||||||
res.end();
|
res.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.get('/user/12/edit')
|
.get('/user/12/edit')
|
||||||
.expect(200, done);
|
.expect('path-1', '/user/:id/:op?')
|
||||||
|
.expect('path-2', '/user/:id/edit')
|
||||||
|
.expect(200, done)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest')
|
, request = require('supertest')
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('supertest');
|
, request = require('supertest');
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user