From 86eb8678fe3a124aa25a45de7b91c8df6cb7b74e Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 6 May 2015 13:38:39 +0200 Subject: Add basic session and router plumbing --- .jshintrc | 1 + README.md | 8 ++++++++ app.js | 36 +++++++++++++++++++++++++++++++++--- config.js | 13 +++++++++++++ controllers/session.js | 7 +++++++ models/user.js | 11 +++++++++++ package.json | 6 +++++- routes/session.js | 9 +++++++++ tests/session.js | 2 ++ 9 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 config.js create mode 100644 controllers/session.js create mode 100644 models/user.js create mode 100644 routes/session.js create mode 100644 tests/session.js diff --git a/.jshintrc b/.jshintrc index a27080d..536ec72 100644 --- a/.jshintrc +++ b/.jshintrc @@ -2,6 +2,7 @@ "globals": { "require": true }, + "node": true, "unused": "vars", "strict": true, "globalstrict": true, diff --git a/README.md b/README.md new file mode 100644 index 0000000..b66e8ba --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +## Installation +Install dependencies using Python 2.7 because node-gyp is not compatible with +Python 3: + + npm install --python=python2.7 + +## Start +Simply invoke `gulp server`. diff --git a/app.js b/app.js index 5b82918..8228e82 100644 --- a/app.js +++ b/app.js @@ -1,13 +1,43 @@ #!/usr/bin/env node 'use strict'; +var config = require('./config'); var express = require('express'); var app = express(); +var glob = require('glob'); +var mongoose = require('mongoose'); +var session = require('express-session'); +var MongoStore = require('connect-mongo')(express); -app.get('/', function(req, resp) { - resp.send('Hello!'); + +// set up database connection +mongoose.connect(config.dburi); +mongoose.connection.on('error', function(err) { + console.error('Database connection failed', err); + process.exit(1); }); +//mongoose.set('debug', true); + + +// persistence (for sessions) +app.use(session({ + store: new MongoStore({ mongooseConnection: mongoose.connection }), + name: 'rvssid', + saveUninitialized: false, + // TODO detect whether over SSL? + // https://github.com/expressjs/session#cookie-options + //cookie: { secure: true }, +})); + + +// autoload all routes, making it available on a common prefix. +var router = express.Router(); +glob.sync('./routes/**/*.js').forEach(function(file) { + require(file)(app, router); +}); +app.use('/api/v1', router); + -var server = app.listen(3000, function() { +var server = app.listen(config.port, function() { var host = server.address().address; var port = server.address().port; diff --git a/config.js b/config.js new file mode 100644 index 0000000..a3400b8 --- /dev/null +++ b/config.js @@ -0,0 +1,13 @@ +'use strict'; + +// TODO include local config + +/** + * Server port to listen on. + */ +exports.port = 3000; + +/** + * Mongoose connection URI. + */ +exports.dburi = 'mongodb://localhost/rvs'; diff --git a/controllers/session.js b/controllers/session.js new file mode 100644 index 0000000..e4bdcdd --- /dev/null +++ b/controllers/session.js @@ -0,0 +1,7 @@ +'use strict'; + +exports.login = function(req, res) { +}; + +exports.logout = function(req, res) { +}; diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..a1dc4c8 --- /dev/null +++ b/models/user.js @@ -0,0 +1,11 @@ +'use strict'; + +var mongoose = require('mongoose'); +var Schema = mongoose.Schema; + +var UserSchema = new Schema({ + username: { + } +}); + +mongoose.model('User', UserSchema); diff --git a/package.json b/package.json index c7dcc08..2c618aa 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,11 @@ "author": "Peter Wu", "license": "MIT", "dependencies": { - "express": "^4.12.3" + "connect-mongo": "^0.8.1", + "express": "^4.12.3", + "express-session": "^1.11.1", + "glob": "^5.0.5", + "mongoose": "^4.0.2" }, "devDependencies": { "gulp": "^3.8.11", diff --git a/routes/session.js b/routes/session.js new file mode 100644 index 0000000..aedb650 --- /dev/null +++ b/routes/session.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = function(app, router) { + var session = require('../controllers/session'); + + router.route('/session') + .post(session.login) + .delete(session.logout); +}; diff --git a/tests/session.js b/tests/session.js new file mode 100644 index 0000000..eb109ab --- /dev/null +++ b/tests/session.js @@ -0,0 +1,2 @@ +'use strict'; + -- cgit v1.2.1