Merge pull request #293 from strongloop/feature/express-4.x
Upgrade to Express 4.x
This commit is contained in:
commit
663e2d1903
Binary file not shown.
After Width: | Height: | Size: 894 B |
|
@ -0,0 +1,56 @@
|
|||
var express = require('express');
|
||||
var path = require('path');
|
||||
|
||||
var middlewares = express.middlewares = {};
|
||||
|
||||
function safeRequire(m) {
|
||||
try {
|
||||
return require(m);
|
||||
} catch (err) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function createMiddlewareNotInstalled(memberName, moduleName) {
|
||||
return function () {
|
||||
throw new Error('The middleware loopback.' + memberName + ' is not installed.\n' +
|
||||
'Please run `npm install ' + moduleName + '` to fix the problem.');
|
||||
};
|
||||
}
|
||||
|
||||
var middlewareModules = {
|
||||
"compress": "compression",
|
||||
"timeout": "connect-timeout",
|
||||
"cookieParser": "cookie-parser",
|
||||
"cookieSession": "cookie-session",
|
||||
"csrf": "csurf",
|
||||
"errorHandler": "errorhandler",
|
||||
"session": "express-session",
|
||||
"methodOverride": "method-override",
|
||||
"logger": "morgan",
|
||||
"responseTime": "response-time",
|
||||
"favicon": "serve-favicon",
|
||||
"directory": "serve-index",
|
||||
// "static": "serve-static",
|
||||
"vhost": "vhost"
|
||||
};
|
||||
|
||||
middlewares.bodyParser = safeRequire('body-parser');
|
||||
middlewares.json = middlewares.bodyParser && middlewares.bodyParser.json;
|
||||
middlewares.urlencoded = middlewares.bodyParser && middlewares.bodyParser.urlencoded;
|
||||
|
||||
for (var m in middlewareModules) {
|
||||
var moduleName = middlewareModules[m];
|
||||
middlewares[m] = safeRequire(moduleName) || createMiddlewareNotInstalled(m, moduleName);
|
||||
}
|
||||
|
||||
// serve-favicon requires a path
|
||||
var favicon = middlewares.favicon;
|
||||
middlewares.favicon = function (icon, options) {
|
||||
icon = icon || path.join(__dirname, '../favicon.ico');
|
||||
return favicon(icon, options);
|
||||
};
|
||||
|
||||
module.exports = express;
|
||||
|
||||
|
|
@ -2,15 +2,12 @@
|
|||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var express = require('express')
|
||||
var express = require('./express-middleware')
|
||||
, fs = require('fs')
|
||||
, ejs = require('ejs')
|
||||
, EventEmitter = require('events').EventEmitter
|
||||
, path = require('path')
|
||||
, proto = require('./application')
|
||||
, DataSource = require('loopback-datasource-juggler').DataSource
|
||||
, ModelBuilder = require('loopback-datasource-juggler').ModelBuilder
|
||||
, i8n = require('inflection')
|
||||
, merge = require('util')._extend
|
||||
, assert = require('assert');
|
||||
|
||||
|
@ -103,6 +100,13 @@ for (var key in express) {
|
|||
, Object.getOwnPropertyDescriptor(express, key));
|
||||
}
|
||||
|
||||
for (var key in express.middlewares) {
|
||||
Object.defineProperty(
|
||||
loopback
|
||||
, key
|
||||
, Object.getOwnPropertyDescriptor(express.middlewares, key));
|
||||
}
|
||||
|
||||
/*!
|
||||
* Expose additional loopback middleware
|
||||
* for example `loopback.configure` etc.
|
||||
|
|
22
package.json
22
package.json
|
@ -32,8 +32,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"debug": "~0.8.1",
|
||||
"express": "~3.5.0",
|
||||
"strong-remoting": "~1.4.0",
|
||||
"express": "4.x",
|
||||
"body-parser": "~1.2.2",
|
||||
"strong-remoting": "2.0.0-beta2",
|
||||
"inflection": "~1.3.5",
|
||||
"passport": "~0.2.0",
|
||||
"passport-local": "~1.0.0",
|
||||
|
@ -44,34 +45,37 @@
|
|||
"underscore": "~1.6.0",
|
||||
"uid2": "0.0.3",
|
||||
"async": "~0.9.0",
|
||||
"canonical-json": "0.0.3"
|
||||
"canonical-json": "0.0.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"loopback-datasource-juggler": "2.0.0-beta1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cookie-parser": "~1.1.0",
|
||||
"errorhandler": "~1.0.1",
|
||||
"serve-favicon": "~2.0.0",
|
||||
"loopback-datasource-juggler": "2.0.0-beta1",
|
||||
"mocha": "~1.18.0",
|
||||
"strong-task-emitter": "0.0.x",
|
||||
"supertest": "~0.12.1",
|
||||
"supertest": "~0.13.0",
|
||||
"chai": "~1.9.1",
|
||||
"loopback-testing": "~0.1.2",
|
||||
"browserify": "~4.1.5",
|
||||
"loopback-testing": "~0.1.3",
|
||||
"browserify": "~4.1.6",
|
||||
"grunt": "~0.4.5",
|
||||
"grunt-browserify": "~2.1.0",
|
||||
"grunt-contrib-uglify": "~0.4.0",
|
||||
"grunt-contrib-jshint": "~0.10.0",
|
||||
"grunt-contrib-watch": "~0.6.1",
|
||||
"karma-script-launcher": "~0.1.0",
|
||||
"karma-chrome-launcher": "~0.1.3",
|
||||
"karma-chrome-launcher": "~0.1.4",
|
||||
"karma-firefox-launcher": "~0.1.3",
|
||||
"karma-html2js-preprocessor": "~0.1.0",
|
||||
"karma-phantomjs-launcher": "~0.1.4",
|
||||
"karma": "~0.12.16",
|
||||
"karma-browserify": "~0.2.0",
|
||||
"karma-browserify": "~0.2.1",
|
||||
"karma-mocha": "~0.1.3",
|
||||
"grunt-karma": "~0.8.3",
|
||||
"loopback-explorer": "~1.1.0"
|
||||
"loopback-explorer": "~1.1.1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -327,102 +327,6 @@ describe('app', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('installMiddleware()', function() {
|
||||
var app;
|
||||
beforeEach(function() { app = loopback(); });
|
||||
|
||||
it('installs loopback.token', function(done) {
|
||||
app.models.accessToken = loopback.AccessToken;
|
||||
|
||||
app.installMiddleware();
|
||||
|
||||
app.get('/', function(req, res) {
|
||||
res.send({ accessTokenId: req.accessToken && req.accessToken.id });
|
||||
});
|
||||
|
||||
app.models.accessToken.create({}, function(err, token) {
|
||||
if (err) done(err);
|
||||
request(app).get('/')
|
||||
.set('Authorization', token.id)
|
||||
.expect(200, { accessTokenId: token.id })
|
||||
.end(done);
|
||||
});
|
||||
});
|
||||
|
||||
it('emits "middleware:preprocessors" before handlers are installed',
|
||||
function(done) {
|
||||
app.on('middleware:preprocessors', function() {
|
||||
this.use(function(req, res, next) {
|
||||
req.preprocessed = true;
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
app.installMiddleware();
|
||||
|
||||
app.get('/', function(req, res) {
|
||||
res.send({ preprocessed: req.preprocessed });
|
||||
});
|
||||
|
||||
request(app).get('/')
|
||||
.expect(200, { preprocessed: true})
|
||||
.end(done);
|
||||
}
|
||||
);
|
||||
|
||||
it('emits "middleware:handlers before installing express router',
|
||||
function(done) {
|
||||
app.on('middleware:handlers', function() {
|
||||
this.use(function(req, res, next) {
|
||||
res.send({ handler: 'middleware' });
|
||||
});
|
||||
});
|
||||
|
||||
app.installMiddleware();
|
||||
|
||||
app.get('/', function(req, res) {
|
||||
res.send({ handler: 'router' });
|
||||
});
|
||||
|
||||
request(app).get('/')
|
||||
.expect(200, { handler: 'middleware' })
|
||||
.end(done);
|
||||
}
|
||||
);
|
||||
|
||||
it('emits "middleware:error-handlers" after all request handlers',
|
||||
function(done) {
|
||||
var logs = [];
|
||||
app.on('middleware:error-handlers', function() {
|
||||
app.use(function(err, req, res, next) {
|
||||
logs.push(req.url);
|
||||
next(err);
|
||||
});
|
||||
});
|
||||
|
||||
app.installMiddleware();
|
||||
|
||||
request(app).get('/not-found')
|
||||
.expect(404)
|
||||
.end(function(err, res) {
|
||||
if (err) done(err);
|
||||
expect(logs).to.eql(['/not-found']);
|
||||
done();
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
it('installs REST transport', function(done) {
|
||||
app.model(loopback.Application);
|
||||
app.set('restApiRoot', '/api');
|
||||
app.installMiddleware();
|
||||
|
||||
request(app).get('/api/applications')
|
||||
.expect(200, [])
|
||||
.end(done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('listen()', function() {
|
||||
it('starts http server', function(done) {
|
||||
var app = loopback();
|
||||
|
|
|
@ -8,7 +8,7 @@ var apiPath = '/api';
|
|||
app.use(loopback.cookieParser('secret'));
|
||||
app.use(loopback.token({model: app.models.accessToken}));
|
||||
app.use(apiPath, loopback.rest());
|
||||
app.use(app.router);
|
||||
|
||||
app.use(loopback.urlNotFound());
|
||||
app.use(loopback.errorHandler());
|
||||
app.enableAuth();
|
||||
|
|
Loading…
Reference in New Issue