From 7776dd6b45452b0b716fef40485fa0cc40b1c39c Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Sat, 21 Dec 2013 15:31:34 -0500 Subject: [PATCH] working database save --- bin/cli.js | 31 +++++++++++++++++++++---------- package.json | 3 ++- routes/read-write.js | 14 +++++++++----- server.js | 6 ++++-- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/bin/cli.js b/bin/cli.js index b262233..23a37a6 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -3,6 +3,8 @@ var program = require('commander'), request = require('superagent'), server = require('../server'), logger = require('../utils/logger'), + moment = require('moment'), + fs = require('fs'), options = {}; function loadFile(file, cb) { @@ -13,15 +15,6 @@ function loadFile(file, cb) { if (/\.js$/.test(file)) db = require(path).run(); cb(db); - - process.stdin.resume(); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function (userInput) { - console.log(userInput); - if (userInput.trim().toLowerCase() == 's') { - console.log('saving db'); - } - }); } function loadURL(url, cb) { @@ -38,7 +31,25 @@ function loadURL(url, cb) { } function onDatabaseLoaded(db) { - server.run(db, options); + var app = server.run(db, options); + + process.stdin.resume(); + process.stdin.setEncoding('utf8'); + process.stdin.on('data', function (userInput) { + console.log(userInput); + if (userInput.trim().toLowerCase() == 's') { + var liveDB = app.db(); + var now = moment().format('YYYY-MM-DD:HH-MM-SS') + var filename = 'json-server.' + now + '.json'; + console.assert(liveDB, 'expected live db object'); + fs.writeFileSync(filename, + JSON.stringify(liveDB, null, 2), + 'utf-8'); + console.log('saved db to', filename); + } + }); + + return app; } program diff --git a/package.json b/package.json index 717736f..567e92f 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "logan": "~0.0.2", "superagent": "~0.15.7", "underscore": "~1.5.2", - "underscore.inflections": "~0.2.1" + "underscore.inflections": "~0.2.1", + "moment": "~2.4.0" }, "devDependencies": { "supertest": "~0.8.1", diff --git a/routes/read-write.js b/routes/read-write.js index 4634e11..61f89a8 100644 --- a/routes/read-write.js +++ b/routes/read-write.js @@ -12,6 +12,10 @@ exports.database = function(req, res) { res.jsonp(db) } +exports.db = function() { + return db; +} + // GET /:resource?attr=&attr= exports.list = function(req, res) { var collection = db[req.params.resource], @@ -22,7 +26,7 @@ exports.list = function(req, res) { var value = req.query[key]; properties[key] = utils.toNative(value); }); - + if (_(properties).isEmpty()) { result = collection; } else { @@ -36,20 +40,20 @@ exports.list = function(req, res) { exports.nestedList = function(req, res) { var properties = {}, resource; - + // Set parentID properties[req.params.parent.slice(0, - 1) + 'Id'] = +req.params.parentId; - + // Filter using parentID resource = _.where(db[req.params.resource], properties); - + res.jsonp(resource); } // GET /:resource/:id exports.show = function(req, res) { var resource = _.get(db, req.params.resource, +req.params.id); - + res.jsonp(resource); } diff --git a/server.js b/server.js index 60138c6..50790cf 100644 --- a/server.js +++ b/server.js @@ -47,7 +47,7 @@ function createApp(db, options) { // Enable CORS for everything app.use(cors()); app.options('*', cors()); - + // Set app.router app.use(app.router); @@ -63,6 +63,7 @@ function createApp(db, options) { // Set database routes.setDatabase(db); + app.db = routes.db; // And done! Ready to serve JSON! return app; @@ -88,7 +89,8 @@ function run(db, options) { logger.success('Express server listening on port ' + options.port); logger.success('Congrats! Open http://localhost:' + options.port); }); + return app; } exports.createApp = createApp; -exports.run = run; \ No newline at end of file +exports.run = run;