initial move to loopback server

This commit is contained in:
Berkeley Martinez
2015-06-02 17:27:02 -07:00
parent 57893cf714
commit 956a2b915e
9 changed files with 153 additions and 25 deletions

View File

@ -0,0 +1,4 @@
module.exports = function enableAuthentication(server) {
// enable authentication
server.enableAuth();
};

27
server/boot/explorer.js Normal file
View File

@ -0,0 +1,27 @@
module.exports = function mountLoopBackExplorer(server) {
var explorer;
try {
explorer = require('loopback-explorer');
} catch(err) {
// Print the message only when the app was started via `server.listen()`.
// Do not print any message when the project is used as a component.
server.once('started', function() {
console.log(
'Run `npm install loopback-explorer` to enable the LoopBack explorer'
);
});
return;
}
var restApiRoot = server.get('restApiRoot');
var explorerApp = explorer(server, { basePath: restApiRoot });
server.use('/explorer', explorerApp);
server.once('started', function() {
var baseUrl = server.get('url').replace(/\/$/, '');
// express 4.x (loopback 2.x) uses `mountpath`
// express 3.x (loopback 1.x) uses `route`
var explorerPath = explorerApp.mountpath || explorerApp.route;
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
});
};

View File

4
server/boot/restApi.js Normal file
View File

@ -0,0 +1,4 @@
module.exports = function mountRestApi(server) {
var restApiRoot = server.get('restApiRoot');
server.use(restApiRoot, server.loopback.rest());
};

29
server/config.json Normal file
View File

@ -0,0 +1,29 @@
{
"restApiRoot": "/api",
"host": "0.0.0.0",
"port": 3000,
"remoting": {
"context": {
"enableHttpContext": false
},
"rest": {
"normalizeHttpPath": false,
"xml": false
},
"json": {
"strict": false,
"limit": "100kb"
},
"urlencoded": {
"extended": true,
"limit": "100kb"
},
"cors": {
"origin": true,
"credentials": true
},
"errorHandler": {
"disableStackTrace": false
}
}
}

9
server/datasources.json Normal file
View File

@ -0,0 +1,9 @@
{
"db": {
"name": "db",
"connector": "mongodb",
"host": "127.0.0.1",
"database": "foobar",
"port": 27017
}
}

27
server/middleware.json Normal file
View File

@ -0,0 +1,27 @@
{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {}
},
"session": {
},
"auth": {
},
"parse": {
},
"routes": {
},
"files": {
"loopback#static": {
"params": "$!../public"
}
},
"final": {
"loopback#urlNotFound": {}
},
"final:after": {
"errorhandler": {}
}
}

33
server/model-config.json Normal file
View File

@ -0,0 +1,33 @@
{
"_meta": {
"sources": [
"loopback/common/models",
"loopback/server/models",
"../common/models",
"./models"
]
},
"User": {
"dataSource": "db"
},
"AccessToken": {
"dataSource": "db",
"public": false
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false
},
"Role": {
"dataSource": "db",
"public": false
},
"bonfire": {
"dataSource": "db",
"public": true
}
}

View File

@ -9,7 +9,8 @@ process.on('uncaughtException', function (err) {
process.exit(1); // eslint-disable-line process.exit(1); // eslint-disable-line
}); });
var express = require('express'), var loopback = require('loopback'),
boot = require('loopback-boot'),
accepts = require('accepts'), accepts = require('accepts'),
cookieParser = require('cookie-parser'), cookieParser = require('cookie-parser'),
compress = require('compression'), compress = require('compression'),
@ -51,22 +52,7 @@ var express = require('express'),
/** /**
* Create Express server. * Create Express server.
*/ */
var app = express(); var app = loopback();
/**
* Connect to MongoDB.
*/
mongoose.connect(secrets.db);
mongoose.connection.on('error', function () {
console.error(
'MongoDB Connection Error. Please make sure that MongoDB is running.'
);
});
/**
* Express configuration.
*/
app.set('port', process.env.PORT || 3000); app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views')); app.set('views', path.join(__dirname, 'views'));
@ -191,6 +177,7 @@ app.use(helmet.csp({
safari5: false safari5: false
})); }));
app.use(function (req, res, next) { app.use(function (req, res, next) {
// Make user object available in templates. // Make user object available in templates.
res.locals.user = req.user; res.locals.user = req.user;
@ -198,9 +185,10 @@ app.use(function (req, res, next) {
}); });
app.use( app.use(
express.static(path.join(__dirname, '../public'), { maxAge: 86400000 }) loopback.static(path.join(__dirname, '../public'), { maxAge: 86400000 })
); );
boot(app, __dirname);
app.use(function (req, res, next) { app.use(function (req, res, next) {
// Remember original destination before login. // Remember original destination before login.
var path = req.path.split('/')[1]; var path = req.path.split('/')[1];
@ -273,12 +261,19 @@ if (process.env.NODE_ENV === 'development') {
* Start Express server. * Start Express server.
*/ */
app.listen(app.get('port'), function () { app.start = function() {
console.log( app.listen(app.get('port'), function () {
'FreeCodeCamp server listening on port %d in %s mode', console.log(
app.get('port'), 'FreeCodeCamp server listening on port %d in %s mode',
app.get('env') app.get('port'),
); app.get('env')
}); );
});
};
// start the server if `$ node server.js`
if (require.main === module) {
app.start();
}
module.exports = app; module.exports = app;