summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2015-05-06 13:38:39 +0200
committerPeter Wu <peter@lekensteyn.nl>2015-05-06 13:38:39 +0200
commit86eb8678fe3a124aa25a45de7b91c8df6cb7b74e (patch)
treedbad5ef2ca1e271647eec9bbaeb776cb5feb8c64
parentca204408069c1f02ad04edd48c60188ccbe55974 (diff)
downloadn-86eb8678fe3a124aa25a45de7b91c8df6cb7b74e.tar.gz
Add basic session and router plumbing
-rw-r--r--.jshintrc1
-rw-r--r--README.md8
-rw-r--r--app.js36
-rw-r--r--config.js13
-rw-r--r--controllers/session.js7
-rw-r--r--models/user.js11
-rw-r--r--package.json6
-rw-r--r--routes/session.js9
-rw-r--r--tests/session.js2
9 files changed, 89 insertions, 4 deletions
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';
+