mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
Updated Todo Node.Js app to use express4-tedious middleware
Node.js data access added as npm module express4-tedious.
This commit is contained in:
@@ -2,4 +2,6 @@ node_modules/*
|
||||
bin/*.dll
|
||||
obj/*
|
||||
*.sln
|
||||
*.log
|
||||
*.log
|
||||
config/Development.json
|
||||
config/Production.json
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"connection":{
|
||||
"server" : "<<server name or ip>>",
|
||||
"userName": "<<user name>>",
|
||||
"password": "<<password>>",
|
||||
"options": { "encrypt": true, "database": "<<database name>>" }
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user