用nodejs访问ActiveX对象,以操作Access数据库为例。
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 314
起因有人提问“如果用nodejs访问sqlserver?”找了找资料,发现有两类解决方法,使用第三方nodejs插件:https://github.com/orenmazor/n
起因
有人提问“如果用nodejs访问sql server?”
找了找资料,发现有两类解决方法,使用第三方nodejs插件:https://github.com/orenmazor/node-tds、使用ADODB.ConnectionActiveX对象
参考:
如果用ActiveX那么在Windows下nodejs将会无所不能,类似写asp。那它们怎么通信?得动手试试
经过
思路
nodejs通过cscript.exe(windows脚本进程)间接访问ActiveX
cscript能解析jscriptvbscript两种脚本,无疑为方便维护选jscript开发。
需解决的问题
1、跨进程通信
新版的nodejs里增加了对子进程的操作,跨进程通信不是问题。
var util = require('util'),
    exec = require('child_process').exec,
    child;

child = exec('cat *.js bad_file | wc -l',
  function (error, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
});
如例我们可以拿到控制台的输出内容stdout 

2、数据库访问相关ActiveX,ADODB.Connection
var connection = new ActiveXObject("ADODB.Connection");
var result = 'ok';
try{
    connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + params.accessfile);
    connection.Execute(params.sql);
} catch(ex){
    result = ex.message;
}
return {
    result: result
};
connection.Open(connectionString),链接字符串参数可以设置访问sql server。
3、为方便维护,特别将cscript和nodejs的脚本合并,用typeof exports判断当前运行环境。
4、字符编码cscript代码使用ascii编码
非ascii码字符进行“\uHHHH”Unicode编码。
5、命令行字符需转义,双引号、百分号在命令行有特殊意义。
参数传递使用base64编码,避免冲突
cscript环境MSXML2.DOMDocument可以做base64编解码
function base64Decode(base64){
    var xmldom = new ActiveXObject("MSXML2.DOMDocument");
    var adostream = new ActiveXObject("ADODB.Stream");
    var temp = xmldom.createElement("temp");
    temp.dataType = "bin.base64";
    temp.text = base64;

    adostream.Charset = "utf-8";
    adostream.Type = 1; // 1=adTypeBinary 2=adTypeText
    adostream.Open();
    adostream.Write(temp.nodeTypedValue);
    adostream.Position = 0;
    adostream.Type = 2; // 1=adTypeBinary 2=adTypeText
    var result = adostream.ReadText(-1); // -1=adReadAll
联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2