remove last pieces of connect dependency
- copy over patch.js to shim ServerResponse - bundle `static` middleware
Esse commit está contido em:
@@ -8,6 +8,7 @@
|
|||||||
- `app.router` - is removed
|
- `app.router` - is removed
|
||||||
- `req.accepted*` - use `req.accepts*()` instead
|
- `req.accepted*` - use `req.accepts*()` instead
|
||||||
- `res.location` - relative URL resolution is removed
|
- `res.location` - relative URL resolution is removed
|
||||||
|
- all bundled middleware except `static`
|
||||||
* change:
|
* change:
|
||||||
- `app.route` -> `app.mountpath` when mounting an express app in another express app
|
- `app.route` -> `app.mountpath` when mounting an express app in another express app
|
||||||
- `json spaces` no longer enabled by default in development
|
- `json spaces` no longer enabled by default in development
|
||||||
|
|||||||
@@ -3,7 +3,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../..')
|
var express = require('../..')
|
||||||
, hash = require('./pass').hash;
|
, hash = require('./pass').hash
|
||||||
|
, bodyParser = require('body-parser')
|
||||||
|
, cookieParser = require('cookie-parser')
|
||||||
|
, session = require('express-session')
|
||||||
|
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
|
|
||||||
@@ -14,9 +17,9 @@ app.set('views', __dirname + '/views');
|
|||||||
|
|
||||||
// middleware
|
// middleware
|
||||||
|
|
||||||
app.use(express.bodyParser());
|
app.use(bodyParser());
|
||||||
app.use(express.cookieParser('shhhh, very secret'));
|
app.use(cookieParser('shhhh, very secret'));
|
||||||
app.use(express.session());
|
app.use(session());
|
||||||
|
|
||||||
// Session-persisted message middleware
|
// Session-persisted message middleware
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
var express = require('../..')
|
var express = require('../..')
|
||||||
|
, logger = require('morgan')
|
||||||
, app = express();
|
, app = express();
|
||||||
|
|
||||||
app.set('views', __dirname);
|
app.set('views', __dirname);
|
||||||
@@ -14,11 +15,11 @@ while (n--) {
|
|||||||
pets.push({ name: 'Jane', age: 6, species: 'ferret' });
|
pets.push({ name: 'Jane', age: 6, species: 'ferret' });
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(express.logger('dev'));
|
app.use(logger('dev'));
|
||||||
|
|
||||||
app.get('/', function(req, res){
|
app.get('/', function(req, res){
|
||||||
res.render('pets', { pets: pets });
|
res.render('pets', { pets: pets });
|
||||||
});
|
});
|
||||||
|
|
||||||
app.listen(3000);
|
app.listen(3000);
|
||||||
console.log('Express listening on port 3000');
|
console.log('Express listening on port 3000');
|
||||||
|
|||||||
@@ -4,17 +4,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../../');
|
var express = require('../../');
|
||||||
|
var favicon = require('static-favicon');
|
||||||
|
var cookie-parser = require('cookie-parser');
|
||||||
|
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
|
|
||||||
// ignore GET /favicon.ico
|
// ignore GET /favicon.ico
|
||||||
app.use(express.favicon());
|
app.use(favicon());
|
||||||
|
|
||||||
// pass a secret to cookieParser() for signed cookies
|
// pass a secret to cookieParser() for signed cookies
|
||||||
app.use(express.cookieParser('manny is cool'));
|
app.use(cookieParser('manny is cool'));
|
||||||
|
|
||||||
// add req.session cookie support
|
// add req.session cookie support
|
||||||
app.use(express.cookieSession());
|
app.use(cookieSession());
|
||||||
|
|
||||||
// do something with the session
|
// do something with the session
|
||||||
app.use(count);
|
app.use(count);
|
||||||
@@ -29,4 +31,4 @@ function count(req, res) {
|
|||||||
if (!module.parent) {
|
if (!module.parent) {
|
||||||
app.listen(3000);
|
app.listen(3000);
|
||||||
console.log('Express server listening on port 3000');
|
console.log('Express server listening on port 3000');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../../')
|
var express = require('../../')
|
||||||
, app = module.exports = express();
|
, app = module.exports = express()
|
||||||
|
, favicon = require('static-favicon')
|
||||||
|
, logger = require('morgan')
|
||||||
|
, cookieParser = require('cookie-parser')
|
||||||
|
, bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
|
||||||
// add favicon() before logger() so
|
// add favicon() before logger() so
|
||||||
@@ -12,20 +16,20 @@ var express = require('../../')
|
|||||||
// logged, because this middleware
|
// logged, because this middleware
|
||||||
// reponds to /favicon.ico and does not
|
// reponds to /favicon.ico and does not
|
||||||
// call next()
|
// call next()
|
||||||
app.use(express.favicon());
|
app.use(favicon());
|
||||||
|
|
||||||
// custom log format
|
// custom log format
|
||||||
if ('test' != process.env.NODE_ENV)
|
if ('test' != process.env.NODE_ENV)
|
||||||
app.use(express.logger(':method :url'));
|
app.use(logger(':method :url'));
|
||||||
|
|
||||||
// parses request cookies, populating
|
// parses request cookies, populating
|
||||||
// req.cookies and req.signedCookies
|
// req.cookies and req.signedCookies
|
||||||
// when the secret is passed, used
|
// when the secret is passed, used
|
||||||
// for signing the cookies.
|
// for signing the cookies.
|
||||||
app.use(express.cookieParser('my secret here'));
|
app.use(cookieParser('my secret here'));
|
||||||
|
|
||||||
// parses json, x-www-form-urlencoded, and multipart/form-data
|
// parses json, x-www-form-urlencoded, and multipart/form-data
|
||||||
app.use(express.bodyParser());
|
app.use(bodyParser());
|
||||||
|
|
||||||
app.get('/', function(req, res){
|
app.get('/', function(req, res){
|
||||||
if (req.cookies.remember) {
|
if (req.cookies.remember) {
|
||||||
@@ -51,4 +55,4 @@ app.post('/', function(req, res){
|
|||||||
if (!module.parent){
|
if (!module.parent){
|
||||||
app.listen(3000);
|
app.listen(3000);
|
||||||
console.log('Express started on port 3000');
|
console.log('Express started on port 3000');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../..')
|
var express = require('../..')
|
||||||
|
, logger = require('morgan')
|
||||||
, app = express()
|
, app = express()
|
||||||
|
, bodyParser = require('body-parser')
|
||||||
, api = express();
|
, api = express();
|
||||||
|
|
||||||
// app middleware
|
// app middleware
|
||||||
@@ -12,8 +14,8 @@ app.use(express.static(__dirname + '/public'));
|
|||||||
|
|
||||||
// api middleware
|
// api middleware
|
||||||
|
|
||||||
api.use(express.logger('dev'));
|
api.use(logger('dev'));
|
||||||
api.use(express.bodyParser());
|
api.use(bodyParser());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CORS support.
|
* CORS support.
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
var express = require('../../')
|
var express = require('../../')
|
||||||
, app = module.exports = express()
|
, app = module.exports = express()
|
||||||
|
, logger = require('morgan')
|
||||||
|
, favicon = require('static-favicon')
|
||||||
, silent = 'test' == process.env.NODE_ENV;
|
, silent = 'test' == process.env.NODE_ENV;
|
||||||
|
|
||||||
// general config
|
// general config
|
||||||
@@ -21,9 +23,9 @@ if ('production' == app.settings.env) {
|
|||||||
app.disable('verbose errors');
|
app.disable('verbose errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(express.favicon());
|
app.use(favicon());
|
||||||
|
|
||||||
silent || app.use(express.logger('dev'));
|
silent || app.use(logger('dev'));
|
||||||
|
|
||||||
// Routes
|
// Routes
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../../')
|
var express = require('../../')
|
||||||
|
, logger = require('morgan')
|
||||||
, app = module.exports = express()
|
, app = module.exports = express()
|
||||||
, test = app.get('env') == 'test';
|
, test = app.get('env') == 'test';
|
||||||
|
|
||||||
if (!test) app.use(express.logger('dev'));
|
if (!test) app.use(logger('dev'));
|
||||||
|
|
||||||
// error handling middleware have an arity of 4
|
// error handling middleware have an arity of 4
|
||||||
// instead of the typical (req, res, next),
|
// instead of the typical (req, res, next),
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
var express = require('../..')
|
var express = require('../..')
|
||||||
|
, logger = require('morgan')
|
||||||
, app = express();
|
, app = express();
|
||||||
|
|
||||||
app.set('view engine', 'jade');
|
app.set('view engine', 'jade');
|
||||||
@@ -23,7 +24,7 @@ User.prototype.toJSON = function(){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
app.use(express.logger('dev'));
|
app.use(logger('dev'));
|
||||||
|
|
||||||
// earlier on expose an object
|
// earlier on expose an object
|
||||||
// that we can tack properties on.
|
// that we can tack properties on.
|
||||||
@@ -57,4 +58,4 @@ app.get('/user', function(req, res){
|
|||||||
});
|
});
|
||||||
|
|
||||||
app.listen(3000);
|
app.listen(3000);
|
||||||
console.log('app listening on port 3000');
|
console.log('app listening on port 3000');
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
var express = require('../..');
|
var express = require('../..');
|
||||||
|
var logger = require('morgan');
|
||||||
|
var session = require('express-session');
|
||||||
|
var cookieParser = require('cookie-parser');
|
||||||
|
var bodyParser = require('body-parser');
|
||||||
|
|
||||||
var app = module.exports = express();
|
var app = module.exports = express();
|
||||||
|
|
||||||
@@ -25,20 +29,17 @@ app.response.message = function(msg){
|
|||||||
};
|
};
|
||||||
|
|
||||||
// log
|
// log
|
||||||
if (!module.parent) app.use(express.logger('dev'));
|
if (!module.parent) app.use(logger('dev'));
|
||||||
|
|
||||||
// serve static files
|
// serve static files
|
||||||
app.use(express.static(__dirname + '/public'));
|
app.use(express.static(__dirname + '/public'));
|
||||||
|
|
||||||
// session support
|
// session support
|
||||||
app.use(express.cookieParser('some secret here'));
|
app.use(cookieParser('some secret here'));
|
||||||
app.use(express.session());
|
app.use(session());
|
||||||
|
|
||||||
// parse request bodies (req.body)
|
// parse request bodies (req.body)
|
||||||
app.use(express.bodyParser());
|
app.use(bodyParser());
|
||||||
|
|
||||||
// support _method (PUT in forms etc)
|
|
||||||
app.use(express.methodOverride());
|
|
||||||
|
|
||||||
// expose the "messages" local variable when views are rendered
|
// expose the "messages" local variable when views are rendered
|
||||||
app.use(function(req, res, next){
|
app.use(function(req, res, next){
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
var express = require('../..')
|
var express = require('../..')
|
||||||
, app = express()
|
, app = express()
|
||||||
|
, logger = require('morgan')
|
||||||
|
, cookieParser = require('cookie-parser')
|
||||||
|
, bodyParser = require('body-parser')
|
||||||
, site = require('./site')
|
, site = require('./site')
|
||||||
, post = require('./post')
|
, post = require('./post')
|
||||||
, user = require('./user');
|
, user = require('./user');
|
||||||
@@ -13,10 +16,9 @@ var express = require('../..')
|
|||||||
|
|
||||||
app.set('view engine', 'jade');
|
app.set('view engine', 'jade');
|
||||||
app.set('views', __dirname + '/views');
|
app.set('views', __dirname + '/views');
|
||||||
app.use(express.logger('dev'));
|
app.use(logger('dev'));
|
||||||
app.use(express.cookieParser());
|
app.use(cookieParser());
|
||||||
app.use(express.bodyParser());
|
app.use(bodyParser());
|
||||||
app.use(express.methodOverride());
|
|
||||||
app.use(express.static(__dirname + '/public'));
|
app.use(express.static(__dirname + '/public'));
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ var express = require('../..');
|
|||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(express.logger('dev'));
|
|
||||||
|
|
||||||
// Required by session() middleware
|
// Required by session() middleware
|
||||||
// pass the secret for signed cookies
|
// pass the secret for signed cookies
|
||||||
// (required by session())
|
// (required by session())
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
var express = require('../..');
|
var express = require('../..');
|
||||||
|
var logger = require('morgan');
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
// log requests
|
// log requests
|
||||||
app.use(express.logger('dev'));
|
app.use(logger('dev'));
|
||||||
|
|
||||||
// express on its own has no notion
|
// express on its own has no notion
|
||||||
// of a "file". The express.static()
|
// of a "file". The express.static()
|
||||||
@@ -41,4 +42,4 @@ console.log('listening on port 3000');
|
|||||||
console.log('try:');
|
console.log('try:');
|
||||||
console.log(' GET /hello.txt');
|
console.log(' GET /hello.txt');
|
||||||
console.log(' GET /js/app.js');
|
console.log(' GET /js/app.js');
|
||||||
console.log(' GET /css/style.css');
|
console.log(' GET /css/style.css');
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var express = require('../..');
|
var express = require('../..');
|
||||||
|
var logger = require('morgan');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
edit /etc/hosts:
|
edit /etc/hosts:
|
||||||
@@ -16,7 +17,7 @@ edit /etc/hosts:
|
|||||||
|
|
||||||
var main = express();
|
var main = express();
|
||||||
|
|
||||||
main.use(express.logger('dev'));
|
main.use(logger('dev'));
|
||||||
|
|
||||||
main.get('/', function(req, res){
|
main.get('/', function(req, res){
|
||||||
res.send('Hello from main app!')
|
res.send('Hello from main app!')
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ var mixin = require('utils-merge')
|
|||||||
, escapeHtml = require('escape-html')
|
, escapeHtml = require('escape-html')
|
||||||
, Router = require('./router')
|
, Router = require('./router')
|
||||||
, methods = require('methods')
|
, methods = require('methods')
|
||||||
, middleware = require('./middleware')
|
, middleware = require('./middleware/init')
|
||||||
|
, query = require('./middleware/query')
|
||||||
, debug = require('debug')('express:application')
|
, debug = require('debug')('express:application')
|
||||||
, View = require('./view')
|
, View = require('./view')
|
||||||
, http = require('http');
|
, http = require('http');
|
||||||
@@ -98,7 +99,7 @@ app.lazyrouter = function() {
|
|||||||
strict: this.enabled('strict routing')
|
strict: this.enabled('strict routing')
|
||||||
});
|
});
|
||||||
|
|
||||||
this._router.use(middleware.query());
|
this._router.use(query());
|
||||||
this._router.use(middleware.init(this));
|
this._router.use(middleware.init(this));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
+8
-18
@@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
var EventEmitter = require('events').EventEmitter;
|
var EventEmitter = require('events').EventEmitter;
|
||||||
|
|
||||||
var connect = require('connect')
|
var merge = require('merge-descriptors')
|
||||||
, merge = require('merge-descriptors')
|
|
||||||
, mixin = require('utils-merge')
|
, mixin = require('utils-merge')
|
||||||
|
|
||||||
var proto = require('./application')
|
var proto = require('./application')
|
||||||
@@ -14,18 +13,15 @@ var proto = require('./application')
|
|||||||
, req = require('./request')
|
, req = require('./request')
|
||||||
, res = require('./response')
|
, res = require('./response')
|
||||||
|
|
||||||
|
// monkey patch ServerResponse methods
|
||||||
|
require('./patch')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expose `createApplication()`.
|
* Expose `createApplication()`.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
exports = module.exports = createApplication;
|
exports = module.exports = createApplication;
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose mime.
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.mime = connect.mime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an express application.
|
* Create an express application.
|
||||||
*
|
*
|
||||||
@@ -47,13 +43,6 @@ function createApplication() {
|
|||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Expose connect.middleware as express.*
|
|
||||||
* for example `express.logger` etc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
merge(exports, connect.middleware);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expose the prototypes.
|
* Expose the prototypes.
|
||||||
*/
|
*/
|
||||||
@@ -69,7 +58,8 @@ exports.response = res;
|
|||||||
exports.Route = Route;
|
exports.Route = Route;
|
||||||
exports.Router = Router;
|
exports.Router = Router;
|
||||||
|
|
||||||
// Error handler title
|
/**
|
||||||
|
* Expose middleware
|
||||||
exports.errorHandler.title = 'Express';
|
*/
|
||||||
|
|
||||||
|
exports.static = require('./middleware/static');
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
|
|
||||||
/**
|
|
||||||
* Module dependencies.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var parseUrl = require('./utils').parseUrl;
|
|
||||||
var qs = require('qs');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialization middleware, exposing the
|
|
||||||
* request and response to eachother, as well
|
|
||||||
* as defaulting the X-Powered-By header field.
|
|
||||||
*
|
|
||||||
* @param {Function} app
|
|
||||||
* @return {Function}
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.init = function(app){
|
|
||||||
return function expressInit(req, res, next){
|
|
||||||
if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');
|
|
||||||
req.res = res;
|
|
||||||
res.req = req;
|
|
||||||
req.next = next;
|
|
||||||
|
|
||||||
req.__proto__ = app.request;
|
|
||||||
res.__proto__ = app.response;
|
|
||||||
|
|
||||||
res.locals = res.locals || Object.create(null);
|
|
||||||
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query:
|
|
||||||
*
|
|
||||||
* Automatically parse the query-string when available,
|
|
||||||
* populating the `req.query` object using
|
|
||||||
* [qs](https://github.com/visionmedia/node-querystring).
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
*
|
|
||||||
* .use(connect.query())
|
|
||||||
* .use(function(req, res){
|
|
||||||
* res.end(JSON.stringify(req.query));
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* The `options` passed are provided to qs.parse function.
|
|
||||||
*
|
|
||||||
* @param {Object} options
|
|
||||||
* @return {Function}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
exports.query = function query(options){
|
|
||||||
return function query(req, res, next){
|
|
||||||
if (!req.query) {
|
|
||||||
req.query = ~req.url.indexOf('?')
|
|
||||||
? qs.parse(parseUrl(req).query, options)
|
|
||||||
: {};
|
|
||||||
}
|
|
||||||
|
|
||||||
next();
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Initialization middleware, exposing the
|
||||||
|
* request and response to eachother, as well
|
||||||
|
* as defaulting the X-Powered-By header field.
|
||||||
|
*
|
||||||
|
* @param {Function} app
|
||||||
|
* @return {Function}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.init = function(app){
|
||||||
|
return function expressInit(req, res, next){
|
||||||
|
if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');
|
||||||
|
req.res = res;
|
||||||
|
res.req = req;
|
||||||
|
req.next = next;
|
||||||
|
|
||||||
|
req.__proto__ = app.request;
|
||||||
|
res.__proto__ = app.response;
|
||||||
|
|
||||||
|
res.locals = res.locals || Object.create(null);
|
||||||
|
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
var qs = require('qs');
|
||||||
|
var parseUrl = require('../utils').parseUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query:
|
||||||
|
*
|
||||||
|
* Automatically parse the query-string when available,
|
||||||
|
* populating the `req.query` object using
|
||||||
|
* [qs](https://github.com/visionmedia/node-querystring).
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
*
|
||||||
|
* .use(connect.query())
|
||||||
|
* .use(function(req, res){
|
||||||
|
* res.end(JSON.stringify(req.query));
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* The `options` passed are provided to qs.parse function.
|
||||||
|
*
|
||||||
|
* @param {Object} options
|
||||||
|
* @return {Function}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function query(options){
|
||||||
|
return function query(req, res, next){
|
||||||
|
if (!req.query) {
|
||||||
|
req.query = ~req.url.indexOf('?')
|
||||||
|
? qs.parse(parseUrl(req).query, options)
|
||||||
|
: {};
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/*!
|
||||||
|
* Connect - static
|
||||||
|
* Copyright(c) 2010 Sencha Inc.
|
||||||
|
* Copyright(c) 2011 TJ Holowaychuk
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var send = require('send')
|
||||||
|
, utils = require('../utils')
|
||||||
|
, parse = utils.parseUrl
|
||||||
|
, url = require('url');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static:
|
||||||
|
*
|
||||||
|
* Static file server with the given `root` path.
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
*
|
||||||
|
* var oneDay = 86400000;
|
||||||
|
*
|
||||||
|
* connect()
|
||||||
|
* .use(connect.static(__dirname + '/public'))
|
||||||
|
*
|
||||||
|
* connect()
|
||||||
|
* .use(connect.static(__dirname + '/public', { maxAge: oneDay }))
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
*
|
||||||
|
* - `maxAge` Browser cache maxAge in milliseconds. defaults to 0
|
||||||
|
* - `hidden` Allow transfer of hidden files. defaults to false
|
||||||
|
* - `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to true
|
||||||
|
* - `index` Default file name, defaults to 'index.html'
|
||||||
|
*
|
||||||
|
* @param {String} root
|
||||||
|
* @param {Object} options
|
||||||
|
* @return {Function}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports = module.exports = function(root, options){
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
// root required
|
||||||
|
if (!root) throw new Error('static() root path required');
|
||||||
|
|
||||||
|
// default redirect
|
||||||
|
var redirect = false !== options.redirect;
|
||||||
|
|
||||||
|
return function staticMiddleware(req, res, next) {
|
||||||
|
if ('GET' != req.method && 'HEAD' != req.method) return next();
|
||||||
|
var originalUrl = url.parse(req.originalUrl);
|
||||||
|
var path = parse(req).pathname;
|
||||||
|
|
||||||
|
if (path == '/' && originalUrl.pathname[originalUrl.pathname.length - 1] != '/') {
|
||||||
|
return directory();
|
||||||
|
}
|
||||||
|
|
||||||
|
function directory() {
|
||||||
|
if (!redirect) return next();
|
||||||
|
var target;
|
||||||
|
originalUrl.pathname += '/';
|
||||||
|
target = url.format(originalUrl);
|
||||||
|
res.statusCode = 303;
|
||||||
|
res.setHeader('Location', target);
|
||||||
|
res.end('Redirecting to ' + utils.escape(target));
|
||||||
|
}
|
||||||
|
|
||||||
|
function error(err) {
|
||||||
|
if (404 == err.status) return next();
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
send(req, path)
|
||||||
|
.maxage(options.maxAge || 0)
|
||||||
|
.root(root)
|
||||||
|
.index(options.index || 'index.html')
|
||||||
|
.hidden(options.hidden)
|
||||||
|
.on('error', error)
|
||||||
|
.on('directory', directory)
|
||||||
|
.pipe(res);
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*!
|
||||||
|
* Connect
|
||||||
|
* Copyright(c) 2011 TJ Holowaychuk
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var http = require('http');
|
||||||
|
var ServerResponse = http.ServerResponse;
|
||||||
|
|
||||||
|
// apply only once
|
||||||
|
if (ServerResponse.prototype._hasConnectPatch) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// original methods
|
||||||
|
var setHeader = ServerResponse.prototype.setHeader;
|
||||||
|
var writeHead = ServerResponse.prototype.writeHead;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide a public "header sent" flag
|
||||||
|
* until node does.
|
||||||
|
*
|
||||||
|
* @return {Boolean}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
ServerResponse.prototype.__defineGetter__('headerSent', function(){
|
||||||
|
return this._header;
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set header `field` to `val`, special-casing
|
||||||
|
* the `Set-Cookie` field for multiple support.
|
||||||
|
*
|
||||||
|
* @param {String} field
|
||||||
|
* @param {String} val
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
ServerResponse.prototype.setHeader = function(field, val){
|
||||||
|
var key = field.toLowerCase()
|
||||||
|
, prev;
|
||||||
|
|
||||||
|
// special-case Set-Cookie
|
||||||
|
if (this._headers && 'set-cookie' == key) {
|
||||||
|
if (prev = this.getHeader(field)) {
|
||||||
|
if (Array.isArray(prev)) {
|
||||||
|
val = prev.concat(val);
|
||||||
|
} else if (Array.isArray(val)) {
|
||||||
|
val = val.concat(prev);
|
||||||
|
} else {
|
||||||
|
val = [prev, val];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// charset
|
||||||
|
} else if ('content-type' == key && this.charset) {
|
||||||
|
val += '; charset=' + this.charset;
|
||||||
|
}
|
||||||
|
|
||||||
|
return setHeader.call(this, field, val);
|
||||||
|
};
|
||||||
|
|
||||||
|
ServerResponse.prototype.writeHead = function(statusCode, reasonPhrase, headers){
|
||||||
|
if (typeof reasonPhrase === 'object') headers = reasonPhrase;
|
||||||
|
if (typeof headers === 'object') {
|
||||||
|
Object.keys(headers).forEach(function(key){
|
||||||
|
this.setHeader(key, headers[key]);
|
||||||
|
}, this);
|
||||||
|
}
|
||||||
|
if (!this._emittedHeader) this.emit('header');
|
||||||
|
this._emittedHeader = true;
|
||||||
|
return writeHead.call(this, statusCode, reasonPhrase);
|
||||||
|
};
|
||||||
|
|
||||||
|
ServerResponse.prototype._hasConnectPatch = true;
|
||||||
+1
-3
@@ -7,11 +7,9 @@ var accepts = require('accepts');
|
|||||||
var typeis = require('type-is');
|
var typeis = require('type-is');
|
||||||
var http = require('http')
|
var http = require('http')
|
||||||
, utils = require('./utils')
|
, utils = require('./utils')
|
||||||
, connect = require('connect')
|
|
||||||
, fresh = require('fresh')
|
, fresh = require('fresh')
|
||||||
, parseRange = require('range-parser')
|
, parseRange = require('range-parser')
|
||||||
, parse = utils.parseUrl
|
, parse = utils.parseUrl
|
||||||
, mime = connect.mime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request prototype.
|
* Request prototype.
|
||||||
@@ -191,7 +189,7 @@ req.range = function(size){
|
|||||||
*
|
*
|
||||||
* To utilize request bodies, `req.body`
|
* To utilize request bodies, `req.body`
|
||||||
* should be an object. This can be done by using
|
* should be an object. This can be done by using
|
||||||
* the `connect.bodyParser()` middleware.
|
* the `bodyParser()` middleware.
|
||||||
*
|
*
|
||||||
* @param {String} name
|
* @param {String} name
|
||||||
* @param {Mixed} [defaultValue]
|
* @param {Mixed} [defaultValue]
|
||||||
|
|||||||
+3
-4
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
var http = require('http')
|
var http = require('http')
|
||||||
, path = require('path')
|
, path = require('path')
|
||||||
, connect = require('connect')
|
|
||||||
, mixin = require('utils-merge')
|
, mixin = require('utils-merge')
|
||||||
, escapeHtml = require('escape-html')
|
, escapeHtml = require('escape-html')
|
||||||
, sign = require('cookie-signature').sign
|
, sign = require('cookie-signature').sign
|
||||||
@@ -14,10 +13,10 @@ var http = require('http')
|
|||||||
, statusCodes = http.STATUS_CODES
|
, statusCodes = http.STATUS_CODES
|
||||||
, cookie = require('cookie')
|
, cookie = require('cookie')
|
||||||
, send = require('send')
|
, send = require('send')
|
||||||
, mime = connect.mime
|
|
||||||
, resolve = require('url').resolve
|
, resolve = require('url').resolve
|
||||||
, basename = path.basename
|
, basename = path.basename
|
||||||
, extname = path.extname;
|
, extname = path.extname
|
||||||
|
, mime = send.mime
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Response prototype.
|
* Response prototype.
|
||||||
@@ -589,7 +588,7 @@ res.cookie = function(name, val, options){
|
|||||||
options = mixin({}, options);
|
options = mixin({}, options);
|
||||||
var secret = this.req.secret;
|
var secret = this.req.secret;
|
||||||
var signed = options.signed;
|
var signed = options.signed;
|
||||||
if (signed && !secret) throw new Error('connect.cookieParser("secret") required for signed cookies');
|
if (signed && !secret) throw new Error('cookieParser("secret") required for signed cookies');
|
||||||
if ('number' == typeof val) val = val.toString();
|
if ('number' == typeof val) val = val.toString();
|
||||||
if ('object' == typeof val) val = 'j:' + JSON.stringify(val);
|
if ('object' == typeof val) val = 'j:' + JSON.stringify(val);
|
||||||
if (signed) val = 's:' + sign(val, secret);
|
if (signed) val = 's:' + sign(val, secret);
|
||||||
|
|||||||
+3
-3
@@ -3,9 +3,9 @@
|
|||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var mime = require('connect').mime
|
var mime = require('send').mime;
|
||||||
, crc32 = require('buffer-crc32')
|
var crc32 = require('buffer-crc32');
|
||||||
, parse = require('url').parse;
|
var parse = require('url').parse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* toString ref.
|
* toString ref.
|
||||||
|
|||||||
+6
-2
@@ -22,7 +22,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"connect": "2.12.0",
|
|
||||||
"accepts": "1.0.0",
|
"accepts": "1.0.0",
|
||||||
"type-is": "1.0.0",
|
"type-is": "1.0.0",
|
||||||
"range-parser": "1.0.0",
|
"range-parser": "1.0.0",
|
||||||
@@ -47,7 +46,12 @@
|
|||||||
"should": "~2.1.1",
|
"should": "~2.1.1",
|
||||||
"connect-redis": "~1.4.5",
|
"connect-redis": "~1.4.5",
|
||||||
"marked": "0.2.10",
|
"marked": "0.2.10",
|
||||||
"supertest": "~0.8.1"
|
"supertest": "~0.8.1",
|
||||||
|
"body-parser": "1.0.0",
|
||||||
|
"cookie-parser": "1.0.0",
|
||||||
|
"static-favicon": "1.0.0",
|
||||||
|
"express-session": "1.0.1",
|
||||||
|
"morgan": "1.0.0"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"express",
|
"express",
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ var app = express()
|
|||||||
, blog = express()
|
, blog = express()
|
||||||
, admin = express();
|
, admin = express();
|
||||||
|
|
||||||
// app.use(express.logger('dev'))
|
|
||||||
blog.use('/admin', admin);
|
blog.use('/admin', admin);
|
||||||
app.use('/blog', blog);
|
app.use('/blog', blog);
|
||||||
app.set('views', __dirname + '/views');
|
app.set('views', __dirname + '/views');
|
||||||
|
|||||||
@@ -4,16 +4,6 @@ var express = require('../')
|
|||||||
, assert = require('assert');
|
, assert = require('assert');
|
||||||
|
|
||||||
describe('exports', function(){
|
describe('exports', function(){
|
||||||
it('should expose connect middleware', function(){
|
|
||||||
express.should.have.property('bodyParser');
|
|
||||||
express.should.have.property('session');
|
|
||||||
express.should.have.property('static');
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should expose .mime', function(){
|
|
||||||
assert(express.mime == require('connect').mime, 'express.mime should be connect.mime');
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should expose Router', function(){
|
it('should expose Router', function(){
|
||||||
express.Router.should.be.a.Function;
|
express.Router.should.be.a.Function;
|
||||||
})
|
})
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('./support/http');
|
, request = require('./support/http')
|
||||||
|
, bodyParser = require('body-parser')
|
||||||
|
|
||||||
describe('req', function(){
|
describe('req', function(){
|
||||||
describe('.param(name, default)', function(){
|
describe('.param(name, default)', function(){
|
||||||
@@ -33,7 +34,7 @@ describe('req', function(){
|
|||||||
it('should check req.body', function(done){
|
it('should check req.body', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(express.bodyParser());
|
app.use(bodyParser());
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.use(function(req, res){
|
||||||
res.end(req.param('name'));
|
res.end(req.param('name'));
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
|
|
||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('./support/http');
|
, request = require('./support/http')
|
||||||
|
, cookieParser = require('cookie-parser')
|
||||||
|
|
||||||
describe('req', function(){
|
describe('req', function(){
|
||||||
describe('.signedCookies', function(){
|
describe('.signedCookies', function(){
|
||||||
it('should return a signed JSON cookie', function(done){
|
it('should return a signed JSON cookie', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(express.cookieParser('secret'));
|
app.use(cookieParser('secret'));
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.use(function(req, res){
|
||||||
if ('/set' == req.path) {
|
if ('/set' == req.path) {
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
var express = require('../')
|
var express = require('../')
|
||||||
, request = require('./support/http')
|
, request = require('./support/http')
|
||||||
, mixin = require('utils-merge')
|
, mixin = require('utils-merge')
|
||||||
, cookie = require('cookie');
|
, cookie = require('cookie')
|
||||||
|
, cookieParser = require('cookie-parser')
|
||||||
|
|
||||||
describe('res', function(){
|
describe('res', function(){
|
||||||
describe('.cookie(name, object)', function(){
|
describe('.cookie(name, object)', function(){
|
||||||
@@ -134,7 +135,7 @@ describe('res', function(){
|
|||||||
it('should generate a signed JSON cookie', function(done){
|
it('should generate a signed JSON cookie', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(express.cookieParser('foo bar baz'));
|
app.use(cookieParser('foo bar baz'));
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.use(function(req, res){
|
||||||
res.cookie('user', { name: 'tobi' }, { signed: true }).end();
|
res.cookie('user', { name: 'tobi' }, { signed: true }).end();
|
||||||
@@ -155,7 +156,7 @@ describe('res', function(){
|
|||||||
it('should set a signed cookie', function(done){
|
it('should set a signed cookie', function(done){
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.use(express.cookieParser('foo bar baz'));
|
app.use(cookieParser('foo bar baz'));
|
||||||
|
|
||||||
app.use(function(req, res){
|
app.use(function(req, res){
|
||||||
res.cookie('name', 'tobi', { signed: true }).end();
|
res.cookie('name', 'tobi', { signed: true }).end();
|
||||||
|
|||||||
Referência em uma Nova Issue
Bloquear um usuário