From 3071a26b2fbee3ef7d97c55a5f3075b433ac9f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Bajto=C5=A1?= Date: Thu, 27 Nov 2014 20:21:01 +0100 Subject: [PATCH] template/api-server: introduce middleware.json Rework the scaffolded server app to register middleware via the new `middleware.json` file. Note: `serve-static` is kept inside `server/server.js` for now, as there isn't any mechanism for resolving paths in middleware config specified in `middleware.json`. --- templates/components/api-server/component.js | 4 +-- .../api-server/template/server/boot/root.js | 6 ----- .../template/server/middleware.json | 27 +++++++++++++++++++ .../api-server/template/server/server.js | 19 ++----------- test/end-to-end.js | 22 +++++++++++++++ 5 files changed, 53 insertions(+), 25 deletions(-) delete mode 100644 templates/components/api-server/template/server/boot/root.js create mode 100644 templates/components/api-server/template/server/middleware.json diff --git a/templates/components/api-server/component.js b/templates/components/api-server/component.js index 68dfe15e..b7e1c138 100644 --- a/templates/components/api-server/component.js +++ b/templates/components/api-server/component.js @@ -13,8 +13,8 @@ template.package = { "dependencies": { "compression": "^1.0.3", "errorhandler": "^1.1.1", - "loopback": "^2.5.0", - "loopback-boot": "^2.2.0", + "loopback": "^2.8.0", + "loopback-boot": "^2.4.0", "loopback-datasource-juggler": "^2.7.0", "serve-favicon": "^2.0.1" }, diff --git a/templates/components/api-server/template/server/boot/root.js b/templates/components/api-server/template/server/boot/root.js deleted file mode 100644 index e1061423..00000000 --- a/templates/components/api-server/template/server/boot/root.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = function(server) { - // Install a `/` route that returns server status - var router = server.loopback.Router(); - router.get('/', server.loopback.status()); - server.use(router); -}; diff --git a/templates/components/api-server/template/server/middleware.json b/templates/components/api-server/template/server/middleware.json new file mode 100644 index 00000000..9b009cc5 --- /dev/null +++ b/templates/components/api-server/template/server/middleware.json @@ -0,0 +1,27 @@ +{ + "initial:before": { + "loopback#favicon": {} + }, + "initial": { + "compression": {} + }, + "session": { + }, + "auth": { + }, + "parse": { + }, + "routes": { + "loopback#status": { + "paths": "/" + } + }, + "files": { + }, + "final": { + "loopback#urlNotFound": {} + }, + "final:after": { + "errorhandler": {} + } +} diff --git a/templates/components/api-server/template/server/server.js b/templates/components/api-server/template/server/server.js index 0fb50fa0..1795f622 100644 --- a/templates/components/api-server/template/server/server.js +++ b/templates/components/api-server/template/server/server.js @@ -3,14 +3,6 @@ var boot = require('loopback-boot'); var app = module.exports = loopback(); -// Set up the /favicon.ico -app.use(loopback.favicon()); - -// request pre-processing middleware -app.use(loopback.compress()); - -// -- Add your pre-processing middleware here -- - // boot scripts mount components like REST API boot(app, __dirname); @@ -19,15 +11,8 @@ boot(app, __dirname); // passing the static middleware are hitting the file system // Example: // var path = require('path'); -// app.use(loopback.static(path.resolve(__dirname, '../client'))); - -// Requests that get this far won't be handled -// by any middleware. Convert them into a 404 error -// that will be handled later down the chain. -app.use(loopback.urlNotFound()); - -// The ultimate error handler. -app.use(loopback.errorHandler()); +// app.middleware('files', loopback.static( +// path.resolve(__dirname, '../client'))); app.start = function() { // start the web server diff --git a/test/end-to-end.js b/test/end-to-end.js index 81e62641..27dcc9d0 100644 --- a/test/end-to-end.js +++ b/test/end-to-end.js @@ -113,6 +113,21 @@ describe('end-to-end', function() { ], done); }); + it('includes all built-in phases in `middleware.json`', function(done) { + var builtinPhases = readBuiltinPhasesFromSanbox(); + + var middleware = fs.readJsonFileSync( + path.resolve(SANDBOX, 'server/middleware.json')); + var phaseNames = Object.keys(middleware).filter(isNameOfMainPhase); + + expect(phaseNames).to.eql(builtinPhases); + done(); + + function isNameOfMainPhase(name) { + return !/:(before|after)$/.test(name); + } + }); + it('passes scaffolded tests', function(done) { execNpm(['test'], { cwd: SANDBOX }, function(err, stdout, stderr) { done(err); @@ -683,3 +698,10 @@ function configureCustomModel(done) { facetName: 'server' }, done); } + +function readBuiltinPhasesFromSanbox() { + var loopback = require(SANDBOX + '/node_modules/loopback'); + var app = loopback(); + app.lazyrouter(); // initialize request handling phases + return app._requestHandlingPhases.getPhaseNames(); +}