热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Node.js连接SqlServer2008及数据层封装详解

这篇文章主要介绍了Node.js连接SqlServer2008及数据层封装,结合实例形式较为详细的分析了nodejs连接SQLServer2008数据库以及针对数据库操作方法的封装与使用相关实现技巧,需要的朋友可以参考下

本文实例讲述了Node.js连接Sql Server 2008及数据层封装。分享给大家供大家参考,具体如下:

最近需要学习Node.js,所以很久没写东西了,疯狂的看了很久的书。有关于Node.js的学习知识,可以参考官网教程WWW.NODEJS.ORG,或者书籍《Node.js权威指南》。这里我记录一下Node.js连接Sql Server 2008的步骤。

Node.js连接数据库需要特定的模块msnodesql,这个模块需要特定的环境去生成才可以使用。

前期准备如下:

1.安装Node.js(官网上下载)
2.安装node-gyp(安装好node.js后进入到npm目录,执行npm install node-gyp)
3.安装python 2.7.x(WWW.PYTHON.ORG上可以下载,注意下载2.7.X版本)
4.安装Visual C++ 2010 (vs2010中必须有C++模块,也可以单独下载Microsoft)
5.安装SQL Server Native Client 11.0(http://www.microsoft.com/en-us/download/details.aspx?id=29065

这些全部安装好后,就搭建好了生成msnodesql模块的环境,现在可以去官网的module上下载msnodesql模块了(注意利用npm intsall msnodesql也可以安装,但是我是win7 64执行这么命令总是不能正确安装,所以我手动下载了),下载时注意msnodesql的版本和node.js的版本对应。将下载好的msnodesql文件夹复制到node.js的node_modules路径下,然后生成步骤如下:

1.node-gyp configure

2.node-gyp build node-gyp build --debug(前者是release版)

如果生成成功的话,你的msnodesql底下会出现用Visual C++2010生成后的许多工程项目文件。node.js虽然是纯Javascript代码,但大部分功能只是封装成了JS脚本,许多底层的实现其实是C/C++,就好比这个msnodesql模块,里面就有很多CPP文件,所以需要生成为VC项目。

测试:

新建文件test.js:

var obj=require('msnodesql');
console.log(obj);

coby到node.exe目录下,执行node test

若不出意外则会打印msnodesql的对外接口属性。若不能正确输出,则

1.说明msnodesql安装失败或者环境美搭建好,检查上面的安装和生成步骤。

2.说明msnodesql路径没设置好:node.exe会默认去搜索node_module文件下的模块,而msnodesql本身也是一个模块,一个模块的属性是由.json来设定的,检查.json的main属性,看是否是 "main": "./lib/sql.js",sql.js才是monodesql的入口。

最后附一段操作数据库的demo作为参考:

var sql=require('msnodesql');
var conn_str="Driver={SQL Server Native Client 11.0};Server={.};Database={nodetest};uid=sa;PWD=123456;";
sql.open(conn_str, function (err, conn) {
    if (err) {
      console.log('发生错误');
    }
    sql.queryRaw(conn_str, "select * from users", function (err, results) {
      if (err) {
        console.log(err);
      }
      else {
        for (var i = 0; i 

Nodejs连接sqlserver数据层封装

前面简单介绍了nodejs连接sqlserver,接下来介绍将所有数据库操作封装起来,方便项目调用的方法。

思路:所有配置参数写入xml文件,数据库操作封装起来,外部只暴露增删改查方法,方法参数只需要sql语句。

1.nodejs读取xml文件

nodejs解析xml文件需要模块libxmljs,安装:nmp install libxmljs

config.xml文件如下:

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

  
    

建立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, 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 

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

3.测试

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

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

希望本文所述对大家nodejs程序设计有所帮助。


推荐阅读
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • OrbitDBPeer 2 Peer Database using CRDTs
    2019独角兽企业重金招聘Python工程师标准Apeer-to-peerdatabaseforthedecentralizedwebOrbitDBisaserverless ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
author-avatar
Andou1983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有