Nodejs接続sqlserverデータ層パッケージ
5837 ワード
どのようにsqlserverを接続するかについては、前編のnodejs接続sqlserverを参照してください.この記事は主にすべてのデータベース操作をパッケージ化し、プロジェクトの起動に便利です.
考え方:すべての設定パラメータをxmlファイルに書き込み、データベース操作をパッケージ化し、外部は削除の変更方法だけを暴露し、方法パラメータはsql文だけを必要とします.
1.nodejsでxmlファイルを読み込みます.
nodejs解析xmlファイルはモジュールlibxmljsが必要で、インストール:nmp install libxmljs
config.xmlファイルは以下の通りです.
方法は簡単で、xmlファイルを同期して、libxmlモジュールでdataを対象に解析し、最後にすべての属性をparamにパッケージします.(上のコメントを参照して、非同期的に読み取る)
2.dbHelper.js
3.テスト
PS:ブログのコードの中には多くのキーワードがあります.ハイライトが高くない、レイアウトが乱れています.CSDNはどうなっているか分かりません.
考え方:すべての設定パラメータを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>
operate XML.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, 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 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層も簡単で、jsonを出力するのはselectだけで、他は実行します.3.テスト
var db=require('./dbHelper.js');
db.select("select top 10 * from FelixTest");
もちろん、実際のプロジェクトでは呼び出し中にbll層を追加して、具体的な業務ロジックでsqlスクリプトを生成してもいいです.フロントはsqlを組み立てる必要がありません.db層もsqlscriptだけです.PS:ブログのコードの中には多くのキーワードがあります.ハイライトが高くない、レイアウトが乱れています.CSDNはどうなっているか分かりません.