var mysql = require('mysql');
var connection = mysql.createConnection({
host : dbInfo.host,
user : dbInfo.user,
password : dbInfo.password,
port : dbInfo.port,
database : dbInfo.database,
timezone : dbInfo.timezone
});
/*
参数说明:
sql: SQL语句,string类型
args:SQL语句中的参数,Array类型
callback:异步回调函数
*/
function dataBaseControl(sql, args, callback){
if(args == null || args.length == 0){
connection.query(sql, function(error, results, fields){
if(error){
console.error(error);
callback(null);
return;
}
callback(results);
});
} else {
connection.query(sql, args, function(error, results, fields){
if(error){
console.error(error);
callback(null);
return;
}
callback(results);
});
}
}
由于这是我从项目中截取的一些代码,有些函数在这篇博客中没有具体实现,有些函数如 _structureAnalysis 可以在这篇博客找到其具体实现。
/*
参数说明:
sqlObj: SQL语句结构体,Object类型
{
"sql": sql语句,
"value": sql语句中的参数值
}
callback:异步回调函数
*/
function ControlAPI_obj(data, callback){
var sqlObj = _structureAnalysis(data);
dataBaseControl(sqlObj["sql"], sqlObj["value"], (result)=>{
if (result == null || result.length == 0) {
callback(null);
} else {
callback(result);
}
});
};
这里使用Promise重新将接口进行包装,使得可以使用async/await进行调用,符合同步的编码习惯
/*
参数说明:
sqlObj: SQL语句结构体,Object类型
{
"sql": sql语句,
"value": sql语句中的参数值
}
return:语句执行结果
*/
// 传入单条SQL语句
var ControlAPI_obj_async = function(data) {
var sqlObj = _structureAnalysis(data);
return new Promise((resolved, rejected)=>{
dataBaseControl(sqlObj["sql"], sqlObj["value"], (result)=>{
if (result === null) {
rejected(null);
} else {
resolved(result);
}
});
});
}
// 传入多条SQL语句
var ControlAPI_objs_async = function(...vars) {
let len = vars.length;
let promiseList = [];
for(let i = 0; i < len; i++){
let sqlObj = _structureAnalysis(vars[i]);
promiseList.push(new Promise((resolved, rejected)=>{
dataBaseControl(sqlObj["sql"], sqlObj["value"], (result)=>{
if (result === null) {
rejected(null);
} else {
resolved(result);
}
});
}));
}
return Promise.all(promiseList);
}
// 同步写法
async function(...){
[...]
try {
let result_single = await ControlAPI_obj_async(obj1);
let result_multi = await ControlAPI_objs_async(obj1, obj2,...,objn);
} catch (error) {
// 捕获await中Promise的reject的数据
}
[...]
}
// 异步写法
function(...) {
ControlAPI_obj(data, (result) => {
// 对result进行操作
})
}