while database server not available , function of node-express rest service hiexpress
called, nodejs crashes node server , console of node reports
sql server connection closed
i not want happen because either should go err function or @ least must cautht catch block. what avoid crash of nodejs when database server not available using following code absolutely fine long database server available.
var sqlserver = require('seriate'); app.get('/hiexpress',function(req, res) { var sr = {error:'',message:''}; var sql= 'select * table1 id=? , name=?'; var params = {id: 5, name:'sami'}; exedb(res,sr,sql, params);//sent 4 parameters (not 6) }); function exedb(res, sr, sql, params, callback, multiple) { try { var obj = {}; (p in params) { if (params.hasownproperty(p)) { obj[p] = { type: sqlserver.varchar, val: params[p] }; } }; var exeoptions = { query: sql, params: obj }; if (multiple) { exeoptions.multiple = true; } sqlserver.execute(sqlserverconfigobject, exeoptions).then(function (results) { sr.data = results; if (callback) callback(sr); else res.json(sr); //produces result when success }, function (err) { //sr.message = sql; console.log(11); sr.error = err.message; res.json(sr); }); } catch (ex) { console.log(21); sr.error = ex.message; res.json(sr); } }
why preferred use seriate
i had not been comfortable node-sql, when when came multiple queries option not using transaction. facilitates easy go parameterized queries.
you can use transaction without seriate
async below
async.series([ function(callback) {db.run('begin transaction', callback)}, function(callback) {db.run( ..., callback)}, function(callback) {db.run( ..., callback)}, function(callback) {db.run( ..., callback)}, function(callback) {db.run('commit transaction', callback)}, ], function(err, results){ if (err) { db.run('rollback transaction'); return console.log(err); } // if queries return rows results[query-no] contains them })
the code dirty. pass req
, res
params db-layer not idea.
try change exedb. i'm not sure, don't set error catcher promise
function exedb(res, sr, sql, params, callback, multiple) { // execute no error, no doubt var obj = {}; (p in params) { if (params.hasownproperty(p)) { obj[p] = { type: sqlserver.varchar, val: params[p] }; } }; var exeoptions = { query: sql, params: obj }; if (multiple) { exeoptions.multiple = true; } // potential problem here. // catch useless because code below asynchronous. sqlserver.execute(sqlserverconfigobject, exeoptions).then(function (results) { sr.data = results; if (callback) callback(sr); else res.json(sr); //produces result when success }).error(function(err){ // !!! must provide on-error console.log(err); }; }
Comments
Post a Comment