diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/.gitignore b/samples/features/json/todo-app/nodejs-express4-rest-api/.gitignore index f9d85749..f2f223e6 100644 --- a/samples/features/json/todo-app/nodejs-express4-rest-api/.gitignore +++ b/samples/features/json/todo-app/nodejs-express4-rest-api/.gitignore @@ -2,4 +2,6 @@ node_modules/* bin/*.dll obj/* *.sln -*.log \ No newline at end of file +*.log +config/Development.json +config/Production.json \ No newline at end of file diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/app.js b/samples/features/json/todo-app/nodejs-express4-rest-api/app.js index eefae60a..3bb44b34 100644 --- a/samples/features/json/todo-app/nodejs-express4-rest-api/app.js +++ b/samples/features/json/todo-app/nodejs-express4-rest-api/app.js @@ -1,13 +1,20 @@ var express = require('express'); +var config = require('config'); var bodyParser = require('body-parser'); +var tediousExpress = require('express4-tedious'); var app = express(); +app.use(function (req, res, next) { + req.query = tediousExpress(req, config.get('connection')); + next(); +}); + app.use(bodyParser.text()); app.use('/todo', require('./routes/todo')); // catch 404 and forward to error handler app.use(function (req, res, next) { - var err = new Error('Not Found'); + var err = new Error('Not Found: '+ req.method + ":" + req.originalUrl); err.status = 404; next(err); }); diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/config/default.json b/samples/features/json/todo-app/nodejs-express4-rest-api/config/default.json new file mode 100644 index 00000000..55699e68 --- /dev/null +++ b/samples/features/json/todo-app/nodejs-express4-rest-api/config/default.json @@ -0,0 +1,8 @@ +{ + "connection":{ + "server" : "<>", + "userName": "<>", + "password": "<>", + "options": { "encrypt": true, "database": "<>" } + } +} diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/db.js b/samples/features/json/todo-app/nodejs-express4-rest-api/db.js deleted file mode 100644 index c1c73dbc..00000000 --- a/samples/features/json/todo-app/nodejs-express4-rest-api/db.js +++ /dev/null @@ -1,85 +0,0 @@ -function createConnection() { - - var config = { - server : "SERVER.database.windows.net", - userName: "USER", - password: "PASSWORD", - // If you're on Azure, you will need this: - options: { encrypt: true, database: 'DATABASE' } - }; - - var Connection = require('tedious').Connection; - var connection = new Connection(config); - - return connection; -} - -function createRequest(query, connection) { - var Request = require('tedious').Request; - var req = - new Request(query, - function (err, rowCount) { - if (err) { - console.trace(err); - throw err; - } - connection && connection.close(); - console.log('Connection closed'); - }); - return req; -} - -function stream (query, connection, output, defaultContent) { - - var request = query; - if (typeof query == "string") { - request = createRequest(query, connection); - } - - var empty = true; - request.on('row', function (columns) { - if(empty) { - console.log('Response fetched from SQL Database!'); - empty = false; - } - output.write(columns[0].value); - }); - - request.on('done', function (rowCount, more, rows) { - _OnDone(empty, defaultContent, output); - }); - - request.on('doneProc', function (rowCount, more, rows) { - _OnDone(empty, defaultContent, output); - }); - - executeRequest (request, connection); -} - -function _OnDone(empty, defaultContent, output) { - if(empty) { - output.write(defaultContent); - console.log('No results from database - default content is returned.'); - } - try { - console.log('Closing Http Response output.'); - output.end(); - } catch (err) { - console.error(err); - } - } - -function executeRequest (request, connection) { - connection.on('connect', function (err) { - if (err) { - console.trace(err); - throw err; - } - connection.execSql(request); - }); -} - -module.exports.createConnection = createConnection; -module.exports.createRequest = createRequest; -module.exports.executeRequest = executeRequest; -module.exports.stream = stream; \ No newline at end of file diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/package.json b/samples/features/json/todo-app/nodejs-express4-rest-api/package.json index 1376b6f8..d720d78e 100644 --- a/samples/features/json/todo-app/nodejs-express4-rest-api/package.json +++ b/samples/features/json/todo-app/nodejs-express4-rest-api/package.json @@ -12,8 +12,10 @@ }, "dependencies": { "body-parser": "^1.15.2", + "config": "^1.26.1", "debug": "^2.2.0", "express": "^4.14.0", - "tedious": "^1.14.0" + "tedious": "^1.14.0", + "express4-tedious": "^0.1.0" } } diff --git a/samples/features/json/todo-app/nodejs-express4-rest-api/routes/todo.js b/samples/features/json/todo-app/nodejs-express4-rest-api/routes/todo.js index 5df302c8..8929fcf4 100644 --- a/samples/features/json/todo-app/nodejs-express4-rest-api/routes/todo.js +++ b/samples/features/json/todo-app/nodejs-express4-rest-api/routes/todo.js @@ -1,56 +1,49 @@ -var express = require('express'); -var router = express.Router(); - -var db = require('../db.js'); +var router = require('express').Router(); var TYPES = require('tedious').TYPES; /* GET task listing. */ router.get('/', function (req, res) { - db.stream("select * from todo for json path", db.createConnection(), res, '[]'); + + req.query("select * from todo for json path") + .into(res, '[]'); + }); /* GET single task. */ router.get('/:id', function (req, res) { - var conn = db.createConnection(); + req.query("select * from todo where id = @id for json path, without_array_wrapper") + .param('id', req.params.id, TYPES.Int) + .into(res, '{}'); - var request = db.createRequest("select * from todo where id = @id for json path, without_array_wrapper", conn); - request.addParameter('id', TYPES.Int, req.params.id); - db.stream(request, conn, res, '{}'); }); /* POST create task. */ router.post('/', function (req, res) { - var connection = db.createConnection(); - var request = db.createRequest("exec createTodo @todo", connection); - - request.addParameter('todo', TYPES.NVarChar, req.body); - - db.executeRequest(request, connection); + req.query("exec createTodo @todo") + .param('todo', req.body, TYPES.NVarChar) + .exec(res); + }); /* PUT update task. */ router.put('/:id', function (req, res) { - var connection = db.createConnection(); - var request = db.createRequest("exec updateTodo @id, @todo", connection); - - request.addParameter('id', TYPES.Int, req.params.id); - request.addParameter('todo', TYPES.NVarChar, req.body); - - db.executeRequest(request, connection); + req.query("exec updateTodo @id, @todo") + .param('id', req.params.id, TYPES.Int) + .param('todo', req.body, TYPES.NVarChar) + .exec(res); + }); /* DELETE single task. */ router.delete('/:id', function (req, res) { - var connection = db.createConnection(); - var request = db.createRequest("delete from todo where id = @id", connection); + req.query("delete from todo where id = @id") + .param('id', req.params.id, TYPES.Int) + .exec(res); - request.addParameter('id', TYPES.Int, req.params.id); - - db.executeRequest(request, connection); }); module.exports = router; \ No newline at end of file