Nodejs连接sqlserver数据层封装
来源:互联网 发布:淘宝金酷娃玩具店 编辑:程序博客网 时间:2024/06/06 09:01
关于如何连接sqlserver可以参考上篇nodejs连接sqlserver,这一篇主要是将所有数据库操作封装起来,方便项目调用。
思路:所有配置参数写入xml文件,数据库操作封装起来,外部只暴露增删改查方法,方法参数只需要sql语句。
1.nodejs读取xml文件
nodejs解析xml文件需要模块libxmljs,安装:nmp install libxmljs
config.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?><root><mydb driver="SQL Server Native Client 11.0" server="XXX" database="XXX" user="XXX" pwd="XXX"><table name="FelixTest" /></mydb></root>
/*Author:Felix.X.ZhangDate:2014-6-19Introduction:this module provides you with the operations (read) of xml file.*///Async Method/* var libxmljs=require('libxmljs'); var fs=require('fs'); var path='./config.xml'; var param=new params(); fs.readFile(path, 'utf8', function(err, data) { if (err) throw err; var xmlDoc = libxmljs.parseXmlString(data); // xpath queries var mydb = xmlDoc.get('//mydb'); var table=xmlDoc.get('//mydb//table'); param.mydb_server=mydb.attr('server').value(); param.mydb_database=mydb.attr('database').value(); param.mydb_user=mydb.attr('user').value(); param.mydb_pwd=mydb.attr('pwd').value(); param.table_name=table.attr('name').value();}); */function params(){this.mydb_driver="";this.mydb_server="";this.mydb_database="";this.mydb_user="";this.mydb_pwd="";this.table_name="";}function getParamObj(){ var libxmljs=require('libxmljs'); var fs=require('fs'); var path='./config1.xml'; var param=new params(); var data; try{ data= fs.readFileSync(path, 'utf8'); } catch(err){ throw err; } var xmlDoc = libxmljs.parseXmlString(data); var mydb = xmlDoc.get('//mydb'); var table=xmlDoc.get('//mydb//table'); param.mydb_driver=mydb.attr('driver').value(); param.mydb_server=mydb.attr('server').value(); param.mydb_database=mydb.attr('database').value(); param.mydb_user=mydb.attr('user').value(); param.mydb_pwd=mydb.attr('pwd').value(); param.table_name=table.attr('name').value(); //console.log(param.mydb_server+" "+param.table_name); return param;}exports.getParamObj=getParamObj;
方法很简单,同步读取xml文件后利用libxml模块将data解析为对象,最后将所有属性全部封装到param中。(异步读取参考上面注释段)
2.dbHelper.js
/*Author:Felix.X.ZhangDate:2014-6-21Introduction:this module provides you with the operations of add,del,update,select.*///pre-required paramsvar sql = require('msnodesql');var xml=require('../mymodule/operateXML.js');var paramObj=xml.getParamObj();var conn_str="Driver={"+paramObj.mydb_driver+"};Server={"+paramObj.mydb_server+"};Database={"+paramObj.mydb_database+"};uid="+paramObj.mydb_user+";PWD="+paramObj.mydb_pwd+";";//open databasesql.open(conn_str, function (err, conn) { if (err) { console.log(err); }});function exeScript(sqlscript){sql.queryRaw(conn_str, sqlscript, function (err, results) {if (err) {console.log(err);}else {console.log(results);}});}function select(sqlscript){sql.queryRaw(conn_str, sqlscript, function (err, results) {if (err) {console.log(err);}else {var txt=toJson(results,paramObj.table_name);var jsonObj=eval("("+txt+")");console.log(jsonObj);}});}function del(sqlscript){exeScript(sqlscript);}function update(sqlscript){exeScript(sqlscript);}function add(sqlscript){exeScript(sqlscript);}//convert table to jsonfunction toJson(dt,tbName) { var jsonString; if (dt != undefined && dt.rows.length > 0) { var rowLen=dt.rows.length; var colLen=dt.meta.length; jsonString="{"; jsonString+="\""+tbName+"\":["; for (var i = 0; i < rowLen; i++) { jsonString+="{"; for (var j = 0; j < colLen; j++) { if (j < colLen - 1) { jsonString+="\"" + dt.meta[j].name + "\":" + "\"" + dt.rows[i][j]+ "\","; } else if (j == colLen - 1) { jsonString+="\"" + dt.meta[j].name + "\":" + "\"" + dt.rows[i][j] + "\""; } } if (i == rowLen - 1) { jsonString+="}"; } else { jsonString+="},"; } } jsonString+="]}"; return jsonString; } return jsonString; }exports.add=add;exports.del=del;exports.update=update;exports.select=select;
3.测试
var db=require('./dbHelper.js');db.select("select top 10 * from FelixTest");
当然了,在实际项目中可以在调用中间加一个bll层,让具体的业务逻辑去生成sql脚本,前台不需要去组装sql,而db层也只要sqlscript。
PS:博客的代码里很多关键字有的高亮有的不高亮,版式好乱,不知道CSDN是咋了。
1 0
- Nodejs连接sqlserver数据层封装
- nodejs连接sqlserver数据库简单封装-mssql模块
- nodejs连接sqlserver数据库支持事物封装-mssql模块
- nodejs连接sqlserver数据库支持事物封装-mssql模块
- nodejs Controller层 封装
- nodejs Controller层 封装
- nodejs MODEL层 封装(一)
- nodejs MODEL层 封装(二)
- nodejs MODEL层 封装(一)
- nodejs MODEL层 封装(二)
- Nodejs使用tedious驱动模块连接SqlServer
- java +SQLServer 数据层配置
- SQLServer数据层通用类
- 数据连接层源码
- sqlserver 即席连接外部数据
- [SQLServer]处理数据层错误(1)
- 用SQLServer处理数据层错误
- 通用数据访问层--SQLServer版
- Leetcode-Sum Root to Leaf Numbers
- 使用intellij开发第一个google appengine的JSP网站
- 一名合格的程序员需要掌握哪些技能
- RT5350编译UBoot历险记
- aa
- Nodejs连接sqlserver数据层封装
- [windows+cocos2dx]菜单类
- 【线段树】 HDOJ 4366 Successor
- 重建二叉树
- 用python测试mapnik
- 编写一个统计空格制表符与换行符个数的函数
- 好的软件人员一生必看的六十本书
- css 清除浮动
- hibernate Disabling contextual LOB creation as connection was null