标签:style blog http io os ar 使用 for sp
上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 图片验证码的识别”,
下面讲一下Node.js中如何访问数据库, 在做自动化测试过程中, 经常可能遇到需要到数据库取值,或是更新值。来验证页面上的数据正确性。 之前,在google, baidu.com上找了非常多的文章关于Node.js如何访问Sql Server的文章, 都是不行的, 我想是因为, Node.js的开源性, 对于MongoDB, Mysql, 等数据库访问是有请多的模块支持。但对于Sql server就只有微软写的驱动, 但是由于安装非常复杂, 我就没安装成功过。 最后,在baidu.com的时候,找到了一个牛人写的模块叫 mssqlhelper https://www.npmjs.org/package/mssqlhelper, 虽然有蛮多的不支持, 但是对于一些简单的sql操作,还是可以的。
如下是Node.js使用, 我将它们做了一下封装,可以提供select, add, delete,update操作
var db = require(‘./dbHelper‘);
function select(sqlScript, EntityName, topNum, callback)
{
    if(topNum == null)
    {
        topNum = ‘‘;
    }
    if(topNum == ‘‘)
    {
        sqlScript = sqlScript.replace(‘select‘, ‘select @Param1 Parmal1, ‘)
    }
    else
    {
        sqlScript = sqlScript.replace(‘select‘, ‘select top ‘+ topNum +‘ @Param1 Parmal1,  ‘)
    }
    db.config({
        host: 数据库地址
        ,port: 1433
        ,userName: 用户名
        ,password: 密码
        ,database: 数据库名
    });
console.log(‘执行 SQL ‘ + sqlScript.green);
    db.query( sqlScript
        ,{
            Param1: { type : ‘NVarChar‘, size: 7,value : ‘systemDefault‘ }
        }
        ,function(res){
            if(res.err)throw new Error(‘database error:‘+res.err.msg);
            if(res.tables.length == 0){
                console.log(‘无任何记录返回‘);
                //hrow new Error(‘无任何记录返回‘);
                return;
            }
            var rows = res.tables[0].rows;
            if(rows.length == 0){
                callback(‘‘);
            }
            else {
                var jsonString = toJson(res.tables[0], EntityName);
                var result = JSON.parse(jsonString);
                console.log(‘数据库查询结果‘ + jsonString.green);
                callback(result);
//                var columnLength = rows[0].metadata.columns.length;
//                for (var i = 0; i < rows.length; i++) {
//                    console.log(rows[i].getValue(‘Name‘));
//                }
            }
        }
    );
};
function exeScript(sqlscript, callback){
    db.query(
        sqlscript
        ,{
        }
        ,function(res){
            if(res.err)throw new Error(‘database error:‘+res.err.msg);
            callback();
        }
    );
};
function del(sqlscript,callback){
    exeScript(sqlscript,callback);
}
function update(sqlscript,callback){
    exeScript(sqlscript,callback);
}
function add(sqlscript,callback){
    exeScript(sqlscript,callback);
}
//convert table to json
function toJson(data, entityName)
{
    var jsonString;
    if (data != undefined && data.rows.length > 0)
    {
        var rowLen=data.rows.length;
        var colLen=data.rows[0].metadata.columns.length;
        jsonString="{";
        jsonString+="\""+entityName+"\":[";
        for (var i = 0; i < rowLen; i++)
        {
            jsonString+="{";
            for (var j = 1; j < colLen; j++)
            {
                if (j < colLen - 1)
                {
                    jsonString+="\"" + data.rows[0].metadata.columns[j].name + "\":" + "\"" + data.rows[i].getValue(j)+ "\",";
                }
                else if (j == colLen - 1)
                {
                    //console.log(j + ‘ ‘ + i );
                    jsonString+="\"" + data.rows[0].metadata.columns[j].name + "\":" + "\"" + data.rows[i].getValue(j) + "\"";
                }
            }
            if (i == rowLen - 1)
            {
                jsonString+="}";
            }
            else
            {
                jsonString+="},";
            }
        }
        jsonString+="]}";
        return jsonString;
    }
    return jsonString;
}
exports.Add=add;
exports.Delete=del;
exports.Update=update;
exports.Select=select;
标签:style blog http io os ar 使用 for sp
原文地址:http://www.cnblogs.com/Stephending/p/4043882.html