加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Nodejs连接sqlserver数据层封装

发布时间:2020-12-12 13:16:01 所属栏目:MsSql教程 来源:网络整理
导读:? ? 关于如何连接sqlserver可以参考上篇nodejs连接sqlserver,这一篇主要是将所有数据库操作封装起来,方便项目调用。 ? ? 思路:所有配置参数写入xml文件,数据库操作封装起来,外部只暴露增删改查方法,方法参数只需要sql语句。 1.nodejs读取xml文件 ? ? no

? ? 关于如何连接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>


建立operateXML.js:

/*
Author:
	Felix.X.Zhang
Date:
	2014-6-19
Introduction:
	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.Zhang
Date:
	2014-6-21
Introduction:
	this module provides you with the operations  of add,del,update,select.
*/

//pre-required params
var 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 database
sql.open(conn_str,function (err,conn) {
        if (err) {
            console.log(err);
        }
});
function exeScript(sqlscript){
	sql.queryRaw(conn_str,sqlscript,results) {

				if (err) {
					console.log(err);
				}
				else {
					console.log(results);
				}
			});
}
function select(sqlscript){
	sql.queryRaw(conn_str,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 json
function 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;


? ? 封装的db层也很简单,只有select输出json,其他只执行。


3.测试


var db=require('./dbHelper.js');
db.select("select top 10 * from FelixTest");

? ? 当然了,在实际项目中可以在调用中间加一个bll层,让具体的业务逻辑去生成sql脚本,前台不需要去组装sql,而db层也只要sqlscript。

? ? PS:博客的代码里很多关键字有的高亮有的不高亮,版式好乱,不知道CSDN是咋了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读