本文实例讲述了节点。js连接Sql Server 2008及数据层封装。分享给大家供大家参考,具体如下:
最近需要学习Node . js,所以很久没写东西了,疯狂的看了很久的书。有关于Node . js的学习知识,可以参考官网教程,或者书籍《Node . js权威指南》。这里我记录一下节点。js连接Sql Server 2008的步骤。
node . js连接数据库需要特定的模块msnodesql,这个模块需要特定的环境去生成才可以使用。
前期准备如下:
1。安装节点。js(官网上下载)
2 .安装node-gyp(安装好节点。js后进入到npm目录,执行npm安装node-gyp)
3.安装python 2.7.x(上可以下载,注意下载2.7。X版本)
4.安装Visual c++ 2010 (vs2010中必须有c++模块,也可以单独下载微软)
5.安装SQL Server本地客户端()
这些全部安装好后,就搭建好了生成msnodesql模块的环境,现在可以去官网的模块上下载msnodesql模块了(注意利用<代码> npm intsall msnodesql> 代码也可以安装,但是我这个主题是64年执行这么命令总是不能正确安装,所以我手动下载了),下载时注意msnodesql的版本和node . js的版本对应。将下载好的msnodesql文件夹复制到node . js的node_modules路径下,然后生成步骤如下:
1。<代码> node-gyp配置代码>
2。<代码> node-gyp构建代码>或<代码> node-gyp构建——调试> 代码(前者是发布版)
如果生成成功的话,你的msnodesql底下会出现用Visual c++ 2010生成后的许多工程项目文件.node.js虽然是纯javascript代码,但大部分功能只是封装成了JS脚本,许多底层的实现其实是C/c++,就好比这个msnodesql模块,里面就有很多CPP文件,所以需要生成为VC项目。
<强>测试:强>
新建文件. js:
var obj=要求(“msnodesql”); console.log (obj); >之前科比到节点。exe目录下,执行节点测试
若不出意外则会打印msnodesql的对外接口属性。若不能正确输出,则
1。说明msnodesql安装失败或者环境美搭建好,检查上面的安装和生成步骤。
2。说明msnodesql路径没设置好:node.exe会默认去搜索node_module文件下的模块,而msnodesql本身也是一个模块,一个模块的属性是由. json来设定的,检查。json的主要属性,看是否是“主要”:“。/lib/sql.js sql.js才是monodesql的入口。
最后附一段操作数据库的演示作为参考:
var sql=要求(“msnodesql”); var conn_str="司机={SQL Server本地客户端11.0};服务器={。};数据库={nodetest}; uid=sa; PWD=123456;”; sql。打开(conn_str函数(呃,康涅狄格州){ 如果(err) { console.log(“发生错误的); } sql。queryRaw (conn_str“select *的用户”,函数(呃,结果){ 如果(err) { console.log(错); } 其他{ (var=0;我& lt;results.rows.length;我+ +){ console.log(结果。行[我][0]+ results.rows[我][1]); } } }) }) >之前
前面简单介绍了nodejs连接,状态"置疑"接下来介绍将所有数据库操作封装起来,方便项目调用的方法。
思路:所有配置参数写入xml文件,数据库操作封装起来,外部只暴露增删改查方法,方法参数只需要sql语句。
1. nodejs读取xml文件
nodejs解析xml文件需要模块libxmljs,安装:<代码> nmp安装libxmljs 代码>
config . xml文件如下:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; root> & lt; mydb司机=癝QL Server本地客户端11.0”数据库服务器=癤XX”=癤XX”用户=" XXX " pwd=癤XX”比; & lt;表名=" FelixTest "/比; & lt;/mydb> & lt;/root> >之前建立operateXML.js:
/* 作者: Felix.X.Zhang 日期: 2014-6-19 作品简介: 此模块为您提供的操作(读)的xml文件。 *///异步方法/* var libxmljs=要求(“libxmljs”); var fs=要求(fs); var路径=啊?config . xml”; var参数=new params (); fs。readFile函数的路径,use utf8,(呃,数据){ 如果(err)把犯错; xmlDoc var=libxmljs.parseXmlString(数据);//xpath查询 var mydb=xmlDoc.get ('//mydb '); var表=xmlDoc.get (“//mydb//表”); param.mydb_server=mydb.attr(服务器)value (); param.mydb_database=mydb.attr(“数据库”)value (); param.mydb_user=mydb.attr(“用户”)value (); param.mydb_pwd=mydb.attr (pwd) value (); param.table_name=table.attr(“名字”)value (); }); */函数参数(){ this.mydb_driver=" "; this.mydb_server=" "; this.mydb_database=" "; this.mydb_user=" "; this.mydb_pwd=" "; this.table_name=" "; } 函数getParamObj () { var libxmljs=要求(“libxmljs”); var fs=要求(fs); var路径='。/config1.xml '; var参数=new params (); var数据; 尝试{ data=https://www.yisu.com/zixun/fs.readFileSync(路径,use utf8); } 抓住(err) { 把犯错; } xmlDoc var=libxmljs.parseXmlString(数据); var mydb=xmlDoc.get ('//mydb '); var表=xmlDoc.get (“//mydb//表”); param.mydb_driver=mydb.attr(司机)value (); param.mydb_server=mydb.attr(服务器)value (); param.mydb_database=mydb.attr(“数据库”)value (); param.mydb_user=mydb.attr(“用户”)value (); param.mydb_pwd=mydb.attr (pwd) value (); param.table_name=table.attr(“名字”)value ();//console.log(参数。mydb_server + " " + param.table_name); 返回参数; } exports.getParamObj=getParamObj;节点。js连接Sql Server 2008及数据层封装详解