mirror of
https://github.com/zebrajr/express.git
synced 2025-12-06 00:19:48 +01:00
Merge tag '4.15.2'
This commit is contained in:
commit
e5dbb0cb4e
21
History.md
21
History.md
|
|
@ -1,3 +1,8 @@
|
|||
5.x
|
||||
===
|
||||
|
||||
This incorporates all changes after 4.15.0 up to 4.15.2.
|
||||
|
||||
5.0.0-alpha.4 / 2017-03-01
|
||||
==========================
|
||||
|
||||
|
|
@ -70,6 +75,22 @@ This is the first Express 5.0 alpha release, based off 4.10.1.
|
|||
* add:
|
||||
- `app.router` is a reference to the base router
|
||||
|
||||
4.15.2 / 2017-03-06
|
||||
===================
|
||||
|
||||
* deps: qs@6.4.0
|
||||
- Fix regression parsing keys starting with `[`
|
||||
|
||||
4.15.1 / 2017-03-05
|
||||
===================
|
||||
|
||||
* deps: send@0.15.1
|
||||
- Fix issue when `Date.parse` does not return `NaN` on invalid date
|
||||
- Fix strict violation in broken environments
|
||||
* deps: serve-static@1.12.1
|
||||
- Fix issue when `Date.parse` does not return `NaN` on invalid date
|
||||
- deps: send@0.15.1
|
||||
|
||||
4.15.0 / 2017-03-01
|
||||
===================
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
var express = require('../..');
|
||||
var bodyParser = require('body-parser');
|
||||
var hash = require('pbkdf2-password')()
|
||||
var path = require('path');
|
||||
var session = require('express-session');
|
||||
|
||||
var app = module.exports = express();
|
||||
|
|
@ -12,7 +13,7 @@ var app = module.exports = express();
|
|||
// config
|
||||
|
||||
app.set('view engine', 'ejs');
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
// middleware
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
var express = require('../../');
|
||||
var path = require('path');
|
||||
var app = module.exports = express();
|
||||
|
||||
app.get('/', function(req, res){
|
||||
|
|
@ -16,10 +17,9 @@ app.get('/', function(req, res){
|
|||
// /files/* is accessed via req.params[0]
|
||||
// but here we name it :file
|
||||
app.get('/files/:file(*)', function(req, res, next){
|
||||
var file = req.params.file;
|
||||
var path = __dirname + '/files/' + file;
|
||||
var filePath = path.join(__dirname, 'files', req.params.file);
|
||||
|
||||
res.download(path, function(err){
|
||||
res.download(filePath, function (err) {
|
||||
if (!err) return; // file sent
|
||||
if (err && err.status !== 404) return next(err); // non-404 error
|
||||
// file for download not found
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
var express = require('../../');
|
||||
var path = require('path');
|
||||
|
||||
var app = module.exports = express();
|
||||
|
||||
|
|
@ -21,7 +22,11 @@ app.engine('.html', require('ejs').__express);
|
|||
|
||||
// Optional since express defaults to CWD/views
|
||||
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
// Path to our public directory
|
||||
|
||||
app.use(express.static(path.join(__dirname + 'public')));
|
||||
|
||||
// Without this you would need to
|
||||
// supply the extension to res.render()
|
||||
|
|
|
|||
|
|
@ -2,12 +2,7 @@
|
|||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title> <%= title %> </title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
padding: 50px;
|
||||
font: 13px Helvetica, Arial, sans-serif;
|
||||
}
|
||||
</style>
|
||||
<title><%= title %></title>
|
||||
<link rel="stylesheet" href="/stylesheets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -3,12 +3,13 @@
|
|||
*/
|
||||
|
||||
var express = require('../../');
|
||||
var path = require('path');
|
||||
var app = module.exports = express();
|
||||
var logger = require('morgan');
|
||||
var silent = 'test' == process.env.NODE_ENV;
|
||||
|
||||
// general config
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'ejs');
|
||||
|
||||
// our custom "verbose errors" setting
|
||||
|
|
|
|||
|
|
@ -1,51 +0,0 @@
|
|||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var express = require('../../lib/express');
|
||||
|
||||
// Path to our public directory
|
||||
|
||||
var pub = __dirname + '/public';
|
||||
|
||||
// setup middleware
|
||||
|
||||
var app = express();
|
||||
app.use(express.static(pub));
|
||||
|
||||
// Optional since express defaults to CWD/views
|
||||
|
||||
app.set('views', __dirname + '/views');
|
||||
|
||||
// Set our default template engine to "jade"
|
||||
// which prevents the need for extensions
|
||||
// (although you can still mix and match)
|
||||
app.set('view engine', 'jade');
|
||||
|
||||
function User(name, email) {
|
||||
this.name = name;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
// Dummy users
|
||||
var users = [
|
||||
new User('tj', 'tj@vision-media.ca')
|
||||
, new User('ciaran', 'ciaranj@gmail.com')
|
||||
, new User('aaron', 'aaron.heckmann+github@gmail.com')
|
||||
];
|
||||
|
||||
app.get('/', function(req, res){
|
||||
res.render('users', { users: users });
|
||||
});
|
||||
|
||||
// change this to a better error handler in your code
|
||||
// sending stacktrace to users in production is not good
|
||||
app.use(function(err, req, res, next) {
|
||||
res.send(err.stack);
|
||||
});
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (!module.parent) {
|
||||
app.listen(3000);
|
||||
console.log('Express started on port 3000');
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
head
|
||||
title Jade Example
|
||||
link(rel="stylesheet", href="/stylesheets/style.css")
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
doctype html
|
||||
html
|
||||
include header
|
||||
body
|
||||
block content
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
h1 Users
|
||||
#users
|
||||
for user in users
|
||||
include user
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
.user
|
||||
h2= user.name
|
||||
.email= user.email
|
||||
|
|
@ -6,6 +6,7 @@ var escapeHtml = require('escape-html');
|
|||
var express = require('../..');
|
||||
var fs = require('fs');
|
||||
var marked = require('marked');
|
||||
var path = require('path');
|
||||
|
||||
var app = module.exports = express();
|
||||
|
||||
|
|
@ -21,7 +22,7 @@ app.engine('md', function(path, options, fn){
|
|||
});
|
||||
});
|
||||
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
// make it the default so we dont need .md
|
||||
app.set('view engine', 'md');
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
var express = require('../..');
|
||||
var logger = require('morgan');
|
||||
var path = require('path');
|
||||
var session = require('express-session');
|
||||
var bodyParser = require('body-parser');
|
||||
var methodOverride = require('method-override');
|
||||
|
|
@ -17,7 +18,7 @@ var app = module.exports = express();
|
|||
app.set('view engine', 'jade');
|
||||
|
||||
// set views for error and 404 pages
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
// define a custom res.message() method
|
||||
// which stores messages in the session
|
||||
|
|
@ -34,7 +35,7 @@ app.response.message = function(msg){
|
|||
if (!module.parent) app.use(logger('dev'));
|
||||
|
||||
// serve static files
|
||||
app.use(express.static(__dirname + '/public'));
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
// session support
|
||||
app.use(session({
|
||||
|
|
|
|||
|
|
@ -4,23 +4,26 @@
|
|||
|
||||
var express = require('../../..');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
module.exports = function(parent, options){
|
||||
var dir = path.join(__dirname, '..', 'controllers');
|
||||
var verbose = options.verbose;
|
||||
fs.readdirSync(__dirname + '/../controllers').forEach(function(name){
|
||||
if (!fs.statSync(__dirname + '/../controllers/' + name).isDirectory()) return;
|
||||
fs.readdirSync(dir).forEach(function(name){
|
||||
var file = path.join(dir, name)
|
||||
if (!fs.statSync(file).isDirectory()) return;
|
||||
verbose && console.log('\n %s:', name);
|
||||
var obj = require('./../controllers/' + name);
|
||||
var obj = require(file);
|
||||
var name = obj.name || name;
|
||||
var prefix = obj.prefix || '';
|
||||
var app = express();
|
||||
var handler;
|
||||
var method;
|
||||
var path;
|
||||
var url;
|
||||
|
||||
// allow specifying the view engine
|
||||
if (obj.engine) app.set('view engine', obj.engine);
|
||||
app.set('views', __dirname + '/../controllers/' + name + '/views');
|
||||
app.set('views', path.join(__dirname, '..', 'controllers', name, 'views'));
|
||||
|
||||
// generate routes based
|
||||
// on the exported methods
|
||||
|
|
@ -31,27 +34,27 @@ module.exports = function(parent, options){
|
|||
switch (key) {
|
||||
case 'show':
|
||||
method = 'get';
|
||||
path = '/' + name + '/:' + name + '_id';
|
||||
url = '/' + name + '/:' + name + '_id';
|
||||
break;
|
||||
case 'list':
|
||||
method = 'get';
|
||||
path = '/' + name + 's';
|
||||
url = '/' + name + 's';
|
||||
break;
|
||||
case 'edit':
|
||||
method = 'get';
|
||||
path = '/' + name + '/:' + name + '_id/edit';
|
||||
url = '/' + name + '/:' + name + '_id/edit';
|
||||
break;
|
||||
case 'update':
|
||||
method = 'put';
|
||||
path = '/' + name + '/:' + name + '_id';
|
||||
url = '/' + name + '/:' + name + '_id';
|
||||
break;
|
||||
case 'create':
|
||||
method = 'post';
|
||||
path = '/' + name;
|
||||
url = '/' + name;
|
||||
break;
|
||||
case 'index':
|
||||
method = 'get';
|
||||
path = '/';
|
||||
url = '/';
|
||||
break;
|
||||
default:
|
||||
/* istanbul ignore next */
|
||||
|
|
@ -60,15 +63,15 @@ module.exports = function(parent, options){
|
|||
|
||||
// setup
|
||||
handler = obj[key];
|
||||
path = prefix + path;
|
||||
url = prefix + url;
|
||||
|
||||
// before middleware support
|
||||
if (obj.before) {
|
||||
app[method](path, obj.before, handler);
|
||||
verbose && console.log(' %s %s -> before -> %s', method.toUpperCase(), path, key);
|
||||
app[method](url, obj.before, handler);
|
||||
verbose && console.log(' %s %s -> before -> %s', method.toUpperCase(), url, key);
|
||||
} else {
|
||||
app[method](path, handler);
|
||||
verbose && console.log(' %s %s -> %s', method.toUpperCase(), path, key);
|
||||
app[method](url, handler);
|
||||
verbose && console.log(' %s %s -> %s', method.toUpperCase(), url, key);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
var express = require('../..');
|
||||
var path = require('path');
|
||||
var app = express();
|
||||
var logger = require('morgan');
|
||||
var cookieParser = require('cookie-parser');
|
||||
|
|
@ -17,7 +18,7 @@ module.exports = app;
|
|||
// Config
|
||||
|
||||
app.set('view engine', 'jade');
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (!module.parent) {
|
||||
|
|
@ -27,7 +28,7 @@ if (!module.parent) {
|
|||
app.use(methodOverride('_method'));
|
||||
app.use(cookieParser());
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(express.static(__dirname + '/public'));
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
// General
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
var express = require('../..');
|
||||
var path = require('path');
|
||||
var redis = require('redis');
|
||||
|
||||
var db = redis.createClient();
|
||||
|
|
@ -15,8 +16,7 @@ var db = redis.createClient();
|
|||
|
||||
var app = express();
|
||||
|
||||
app.set('view engine', 'jade');
|
||||
app.set('views', __dirname);
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
// populate search
|
||||
|
||||
|
|
@ -26,14 +26,6 @@ db.sadd('ferret', 'jane');
|
|||
db.sadd('cat', 'manny');
|
||||
db.sadd('cat', 'luna');
|
||||
|
||||
/**
|
||||
* GET the search page.
|
||||
*/
|
||||
|
||||
app.get('/', function(req, res){
|
||||
res.render('search');
|
||||
});
|
||||
|
||||
/**
|
||||
* GET search for :query.
|
||||
*/
|
||||
|
|
@ -54,7 +46,7 @@ app.get('/search/:query?', function(req, res, next){
|
|||
*/
|
||||
|
||||
app.get('/client.js', function(req, res){
|
||||
res.sendFile(__dirname + '/client.js');
|
||||
res.sendFile(path.join(__dirname, 'client.js'));
|
||||
});
|
||||
|
||||
/* istanbul ignore next */
|
||||
|
|
|
|||
20
examples/search/public/index.html
Normal file
20
examples/search/public/index.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Search example</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
font: 14px "Helvetica Neue", Helvetica;
|
||||
padding: 50px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>Search</h2>
|
||||
<p>Try searching for "ferret" or "cat".</p>
|
||||
<input type="search" name="search" value="" />
|
||||
<pre />
|
||||
<script src="/client.js" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
doctype
|
||||
html
|
||||
head
|
||||
title Search example
|
||||
style.
|
||||
body {
|
||||
font: 14px "Helvetica Neue", Helvetica;
|
||||
padding: 50px;
|
||||
}
|
||||
body
|
||||
h2 Search
|
||||
p Try searching for "ferret" or "cat".
|
||||
input(type='search')
|
||||
pre
|
||||
script(src='client.js')
|
||||
|
|
@ -258,9 +258,9 @@ app.route = function route(path) {
|
|||
*
|
||||
* By default will `require()` the engine based on the
|
||||
* file extension. For example if you try to render
|
||||
* a "foo.jade" file Express will invoke the following internally:
|
||||
* a "foo.ejs" file Express will invoke the following internally:
|
||||
*
|
||||
* app.engine('jade', require('jade').__express);
|
||||
* app.engine('ejs', require('ejs').__express);
|
||||
*
|
||||
* For engines that do not provide `.__express` out of the box,
|
||||
* or if you wish to "map" a different extension to the template engine
|
||||
|
|
|
|||
|
|
@ -47,11 +47,11 @@
|
|||
"path-is-absolute": "1.0.1",
|
||||
"path-to-regexp": "0.1.7",
|
||||
"proxy-addr": "~1.1.3",
|
||||
"qs": "6.3.1",
|
||||
"qs": "6.4.0",
|
||||
"range-parser": "~1.2.0",
|
||||
"router": "~1.3.0",
|
||||
"send": "0.15.0",
|
||||
"serve-static": "1.12.0",
|
||||
"send": "0.15.1",
|
||||
"serve-static": "1.12.1",
|
||||
"setprototypeof": "1.0.3",
|
||||
"statuses": "~1.3.1",
|
||||
"type-is": "~1.6.14",
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"after": "0.8.2",
|
||||
"body-parser": "1.17.0",
|
||||
"body-parser": "1.17.1",
|
||||
"cookie-parser": "~1.4.3",
|
||||
"ejs": "2.5.6",
|
||||
"express-session": "1.15.1",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
var express = require('../')
|
||||
, fs = require('fs');
|
||||
var path = require('path')
|
||||
|
||||
function render(path, options, fn) {
|
||||
fs.readFile(path, 'utf8', function(err, str){
|
||||
|
|
@ -15,7 +16,7 @@ describe('app', function(){
|
|||
it('should map a template engine', function(done){
|
||||
var app = express();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.engine('.html', render);
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
|
|
@ -36,7 +37,7 @@ describe('app', function(){
|
|||
it('should work without leading "."', function(done){
|
||||
var app = express();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.engine('html', render);
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
|
|
@ -50,7 +51,7 @@ describe('app', function(){
|
|||
it('should work "view engine" setting', function(done){
|
||||
var app = express();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.engine('html', render);
|
||||
app.set('view engine', 'html');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
|
@ -65,7 +66,7 @@ describe('app', function(){
|
|||
it('should work "view engine" with leading "."', function(done){
|
||||
var app = express();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.engine('.html', render);
|
||||
app.set('view engine', '.html');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
|
|
|||
|
|
@ -28,9 +28,8 @@ describe('app', function(){
|
|||
|
||||
request(app)
|
||||
.get('/user/123')
|
||||
.end(function(err, res){
|
||||
res.text.should.equal('123');
|
||||
|
||||
.expect(200, '123', function (err) {
|
||||
if (err) return done(err)
|
||||
request(app)
|
||||
.get('/post/123')
|
||||
.expect('123', done);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
|
||||
var assert = require('assert')
|
||||
var express = require('..');
|
||||
var path = require('path')
|
||||
var tmpl = require('./support/tmpl');
|
||||
|
||||
describe('app', function(){
|
||||
|
|
@ -9,7 +11,7 @@ describe('app', function(){
|
|||
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render(__dirname + '/fixtures/user.tmpl', function (err, str) {
|
||||
app.render(path.join(__dirname, 'fixtures', 'user.tmpl'), function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -22,7 +24,7 @@ describe('app', function(){
|
|||
app.set('view engine', 'tmpl');
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render(__dirname + '/fixtures/user', function(err, str){
|
||||
app.render(path.join(__dirname, 'fixtures', 'user'), function (err, str) {
|
||||
if (err) return done(err);
|
||||
str.should.equal('<p>tobi</p>');
|
||||
done();
|
||||
|
|
@ -32,7 +34,7 @@ describe('app', function(){
|
|||
it('should expose app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render('user.tmpl', function (err, str) {
|
||||
|
|
@ -45,7 +47,7 @@ describe('app', function(){
|
|||
it('should support index.<engine>', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.render('blog/post', function (err, str) {
|
||||
|
|
@ -80,9 +82,10 @@ describe('app', function(){
|
|||
it('should provide a helpful error', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.render('rawr.tmpl', function (err) {
|
||||
err.message.should.equal('Failed to lookup view "rawr.tmpl" in views directory "' + __dirname + '/fixtures"');
|
||||
assert.ok(err)
|
||||
assert.equal(err.message, 'Failed to lookup view "rawr.tmpl" in views directory "' + path.join(__dirname, 'fixtures') + '"')
|
||||
done();
|
||||
});
|
||||
})
|
||||
|
|
@ -92,7 +95,7 @@ describe('app', function(){
|
|||
it('should invoke the callback', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.render('user.tmpl', function (err, str) {
|
||||
// nextTick to prevent cyclic
|
||||
|
|
@ -108,7 +111,7 @@ describe('app', function(){
|
|||
it('should render the template', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.render('email.tmpl', function (err, str) {
|
||||
if (err) return done(err);
|
||||
|
|
@ -123,7 +126,7 @@ describe('app', function(){
|
|||
var app = createApp();
|
||||
|
||||
app.set('view engine', 'tmpl');
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.render('email', function(err, str){
|
||||
if (err) return done(err);
|
||||
|
|
@ -137,7 +140,7 @@ describe('app', function(){
|
|||
it('should lookup the file in the path', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures/default_layout');
|
||||
app.set('views', path.join(__dirname, 'fixtures', 'default_layout'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render('user.tmpl', function (err, str) {
|
||||
|
|
@ -150,7 +153,10 @@ describe('app', function(){
|
|||
describe('when array of paths', function(){
|
||||
it('should lookup the file in the path', function(done){
|
||||
var app = createApp();
|
||||
var views = [__dirname + '/fixtures/local_layout', __dirname + '/fixtures/default_layout'];
|
||||
var views = [
|
||||
path.join(__dirname, 'fixtures', 'local_layout'),
|
||||
path.join(__dirname, 'fixtures', 'default_layout')
|
||||
]
|
||||
|
||||
app.set('views', views);
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
|
@ -164,7 +170,10 @@ describe('app', function(){
|
|||
|
||||
it('should lookup in later paths until found', function(done){
|
||||
var app = createApp();
|
||||
var views = [__dirname + '/fixtures/local_layout', __dirname + '/fixtures/default_layout'];
|
||||
var views = [
|
||||
path.join(__dirname, 'fixtures', 'local_layout'),
|
||||
path.join(__dirname, 'fixtures', 'default_layout')
|
||||
]
|
||||
|
||||
app.set('views', views);
|
||||
app.locals.name = 'tobi';
|
||||
|
|
@ -178,13 +187,17 @@ describe('app', function(){
|
|||
|
||||
it('should error if file does not exist', function(done){
|
||||
var app = createApp();
|
||||
var views = [__dirname + '/fixtures/local_layout', __dirname + '/fixtures/default_layout'];
|
||||
var views = [
|
||||
path.join(__dirname, 'fixtures', 'local_layout'),
|
||||
path.join(__dirname, 'fixtures', 'default_layout')
|
||||
]
|
||||
|
||||
app.set('views', views);
|
||||
app.locals.name = 'tobi';
|
||||
|
||||
app.render('pet.tmpl', function (err, str) {
|
||||
err.message.should.equal('Failed to lookup view "pet.tmpl" in views directories "' + __dirname + '/fixtures/local_layout" or "' + __dirname + '/fixtures/default_layout"');
|
||||
assert.ok(err)
|
||||
assert.equal(err.message, 'Failed to lookup view "pet.tmpl" in views directories "' + views[0] + '" or "' + views[1] + '"')
|
||||
done();
|
||||
})
|
||||
})
|
||||
|
|
@ -281,7 +294,7 @@ describe('app', function(){
|
|||
it('should render the template', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
var user = { name: 'tobi' };
|
||||
|
||||
|
|
@ -295,7 +308,7 @@ describe('app', function(){
|
|||
it('should expose app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.render('user.tmpl', {}, function (err, str) {
|
||||
|
|
@ -308,7 +321,7 @@ describe('app', function(){
|
|||
it('should give precedence to app.render() locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
var jane = { name: 'jane' };
|
||||
|
||||
|
|
|
|||
|
|
@ -539,8 +539,8 @@ describe('app.router', function(){
|
|||
|
||||
request(app)
|
||||
.get('/user/10')
|
||||
.end(function(err, res){
|
||||
res.statusCode.should.equal(200);
|
||||
.expect(200, function (err) {
|
||||
if (err) return done(err)
|
||||
request(app)
|
||||
.get('/user/tj')
|
||||
.expect(404, done);
|
||||
|
|
|
|||
|
|
@ -28,11 +28,7 @@ describe('req', function(){
|
|||
request(app)
|
||||
.get('/')
|
||||
.set('Cookie', cookie)
|
||||
.end(function(err, res){
|
||||
if (err) return done(err);
|
||||
res.body.should.eql({ obj: { foo: 'bar' } });
|
||||
done();
|
||||
});
|
||||
.expect(200, { obj: { foo: 'bar' } }, done)
|
||||
});
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -13,11 +13,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = 'sid=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
||||
res.header['set-cookie'].should.eql([val]);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'sid=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT')
|
||||
.expect(200, done)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
@ -31,11 +28,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = 'sid=; Path=/admin; Expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
||||
res.header['set-cookie'].should.eql([val]);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'sid=; Path=/admin; Expires=Thu, 01 Jan 1970 00:00:00 GMT')
|
||||
.expect(200, done)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -16,11 +16,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = ['user=' + encodeURIComponent('j:{"name":"tobi"}') + '; Path=/'];
|
||||
res.headers['set-cookie'].should.eql(val);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'user=j%3A%7B%22name%22%3A%22tobi%22%7D; Path=/')
|
||||
.expect(200, done)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
@ -34,11 +31,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = ['name=tobi; Path=/'];
|
||||
res.headers['set-cookie'].should.eql(val);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'name=tobi; Path=/')
|
||||
.expect(200, done)
|
||||
})
|
||||
|
||||
it('should allow multiple calls', function(done){
|
||||
|
|
@ -72,11 +66,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = ['name=tobi; Path=/; HttpOnly; Secure'];
|
||||
res.headers['set-cookie'].should.eql(val);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'name=tobi; Path=/; HttpOnly; Secure')
|
||||
.expect(200, done)
|
||||
})
|
||||
|
||||
describe('maxAge', function(){
|
||||
|
|
@ -178,11 +169,8 @@ describe('res', function(){
|
|||
|
||||
request(app)
|
||||
.get('/')
|
||||
.end(function(err, res){
|
||||
var val = ['name=s%3Atobi.xJjV2iZ6EI7C8E5kzwbfA9PVLl1ZR07UTnuTgQQ4EnQ; Path=/'];
|
||||
res.headers['set-cookie'].should.eql(val);
|
||||
done();
|
||||
})
|
||||
.expect('Set-Cookie', 'name=s%3Atobi.xJjV2iZ6EI7C8E5kzwbfA9PVLl1ZR07UTnuTgQQ4EnQ; Path=/')
|
||||
.expect(200, done)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
var express = require('..');
|
||||
var path = require('path')
|
||||
var request = require('supertest');
|
||||
var tmpl = require('./support/tmpl');
|
||||
|
||||
|
|
@ -11,7 +12,7 @@ describe('res', function(){
|
|||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render(__dirname + '/fixtures/user.tmpl');
|
||||
res.render(path.join(__dirname, 'fixtures', 'user.tmpl'))
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -26,7 +27,7 @@ describe('res', function(){
|
|||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render(__dirname + '/fixtures/user');
|
||||
res.render(path.join(__dirname, 'fixtures', 'user'))
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -40,7 +41,7 @@ describe('res', function(){
|
|||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render(__dirname + '/fixtures/user');
|
||||
res.render(path.join(__dirname, 'fixtures', 'user'))
|
||||
});
|
||||
|
||||
request(app)
|
||||
|
|
@ -51,7 +52,7 @@ describe('res', function(){
|
|||
it('should expose app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -66,7 +67,7 @@ describe('res', function(){
|
|||
it('should expose app.locals with `name` property', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.name = 'tobi';
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -81,7 +82,7 @@ describe('res', function(){
|
|||
it('should support index.<engine>', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.set('view engine', 'tmpl');
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -97,7 +98,7 @@ describe('res', function(){
|
|||
it('should next(err)', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.tmpl');
|
||||
|
|
@ -118,7 +119,7 @@ describe('res', function(){
|
|||
var app = createApp();
|
||||
|
||||
app.set('view engine', 'tmpl');
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('email');
|
||||
|
|
@ -134,7 +135,7 @@ describe('res', function(){
|
|||
it('should lookup the file in the path', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures/default_layout');
|
||||
app.set('views', path.join(__dirname, 'fixtures', 'default_layout'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.tmpl', { user: { name: 'tobi' } });
|
||||
|
|
@ -148,7 +149,10 @@ describe('res', function(){
|
|||
describe('when array of paths', function(){
|
||||
it('should lookup the file in the path', function(done){
|
||||
var app = createApp();
|
||||
var views = [__dirname + '/fixtures/local_layout', __dirname + '/fixtures/default_layout'];
|
||||
var views = [
|
||||
path.join(__dirname, 'fixtures', 'local_layout'),
|
||||
path.join(__dirname, 'fixtures', 'default_layout')
|
||||
]
|
||||
|
||||
app.set('views', views);
|
||||
|
||||
|
|
@ -163,7 +167,10 @@ describe('res', function(){
|
|||
|
||||
it('should lookup in later paths until found', function(done){
|
||||
var app = createApp();
|
||||
var views = [__dirname + '/fixtures/local_layout', __dirname + '/fixtures/default_layout'];
|
||||
var views = [
|
||||
path.join(__dirname, 'fixtures', 'local_layout'),
|
||||
path.join(__dirname, 'fixtures', 'default_layout')
|
||||
]
|
||||
|
||||
app.set('views', views);
|
||||
|
||||
|
|
@ -183,7 +190,7 @@ describe('res', function(){
|
|||
it('should render the template', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
var user = { name: 'tobi' };
|
||||
|
||||
|
|
@ -199,7 +206,7 @@ describe('res', function(){
|
|||
it('should expose app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -214,7 +221,7 @@ describe('res', function(){
|
|||
it('should expose res.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.locals.user = { name: 'tobi' };
|
||||
|
|
@ -229,7 +236,7 @@ describe('res', function(){
|
|||
it('should give precedence to res.locals over app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -245,7 +252,7 @@ describe('res', function(){
|
|||
it('should give precedence to res.render() locals over res.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
var jane = { name: 'jane' };
|
||||
|
||||
app.use(function(req, res){
|
||||
|
|
@ -261,7 +268,7 @@ describe('res', function(){
|
|||
it('should give precedence to res.render() locals over app.locals', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
app.locals.user = { name: 'tobi' };
|
||||
var jane = { name: 'jane' };
|
||||
|
||||
|
|
@ -279,7 +286,7 @@ describe('res', function(){
|
|||
it('should pass the resulting string', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
var tobi = { name: 'tobi' };
|
||||
|
|
@ -299,7 +306,7 @@ describe('res', function(){
|
|||
it('should pass the resulting string', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.locals.user = { name: 'tobi' };
|
||||
|
|
@ -318,7 +325,7 @@ describe('res', function(){
|
|||
it('should pass it to the callback', function(done){
|
||||
var app = createApp();
|
||||
|
||||
app.set('views', __dirname + '/fixtures');
|
||||
app.set('views', path.join(__dirname, 'fixtures'))
|
||||
|
||||
app.use(function(req, res){
|
||||
res.render('user.tmpl', function (err) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user