Всем доброго! Начал изучать js и работу с node.js, для осознания заблуждений и неправильного подхода прошу рассмотреть и сказать свое мнение. Очень надеюсь на здоровую критику и пинки в нужном направлении)))))
Я еще не закончил его(((
mysql = Use("mysql");
connection = mysql.createConnection({
user: Cube.db.user,
password: Cube.db.password,
database: Cube.db.database,
host: Cube.db.host
});
Cube.db.connect = true;
ActiveQuery = function(){
this.db = {};
this.result = {};
this.systemErrors = [
'Не существует такого столбца в таблице: ',
'Не верные передаваемые данные, надо передавать объект ключ которого название столбца, а значение является значением столбца ({name: \'Djon\'})',
'Не верные передаваемые данные, надо передавать массив значение которого является названием столбца ([name])',
' надо привести к типу:',
'Надо передать данные'
];
this.findOne = function(data, cols){
if(this.error({data: data, cols: cols})){
return false;
}
var sql = 'SELECT ';
var count, step, result = false;
if(cols == undefined){
sql += '*';
}
else{
count = Library.count(cols), step = 1;
for(var col in cols){
sql += '`'+cols[col]+'`';
if(count > step){
sql += ', ';
}
step++;
}
}
sql += ' FROM `'+this.db.name+'` WHERE ';
count = Library.count(data);
if(count && data != undefined){
step = 1;
for(var e in data){
sql += e+' = '+data[e];
if(count > step){
sql += ' AND ';
}
step++;
}
}
else{
sql += this.db.idCol+' <> 0';
}
sql += ' ORDER BY '+this.db.idCol+' DESC LIMIT 1';
//this.getQuery(sql);
console.log(sql);
//return this.result;
};
this.findAll = function(data, cols){
if(this.error({data: data, cols: cols})){
return false;
}
var sql = 'SELECT ';
var count, step, result = false;
if(cols == undefined){
sql += '*';
}
else{
count = Library.count(cols), step = 1;
for(var col in cols){
sql += '`'+cols[col]+'`';
if(count > step){
sql += ', '
}
step++;
}
}
sql += ' FROM `'+this.db.name+'` WHERE ';
count = Library.count(data);
if(count && data != undefined){
step = 1;
for(var e in data){
sql += e+' = '+data[e];
if(count > step){
sql += ' AND ';
}
step++;
}
}
else{
sql += this.db.idCol+' <> 0';
}
//this.getQuery(sql);
console.log(sql);
};
this.update = function(id, data){
if(this.error({data: id})){
return false;
}
if(this.error({data: data})){
return false;
}
if(id == undefined || !Library.count(id) || data == undefined || !Library.count(data)){
console.log(this.systemErrors[4]);
return false;
}
var sql = 'UPDATE '+this.db.name+' SET ';
var count = Library.count(data), step = 1;
for(var e in data){
sql += e+'='+data[e];
if(count > step){
sql += ', ';
}
step++;
}
count = Library.count(id);
step = 1;
sql += ' WHERE ';
for(var i in id){
sql += i+'='+id[i];
if(count > step){
sql += ' AND ';
}
step++;
}
//this.getQuery(sql);
console.log(sql);
};
this.deleteAll = function(data){
if(data == undefined || !Library.count(data)){
console.log(this.systemErrors[4]);
return false;
}
if(this.error({data: data})){
return false;
}
var sql = 'DELETE FROM '+this.db.name+' WHERE ';
var count = Library.count(data), step = 1;
for(var e in data){
sql += e+'='+data[e];
if(count > step){
sql += ' AND ';
}
step++;
}
console.log(sql);
};
this.findBySql = function(sql){
console.log(sql);
};
this.count = function(data){
if(this.error({data: data})){
return false;
}
var sql = 'SELECT COUNT(*) FROM '+this.db.name+' ';
if(data != undefined){
sql += ' WHERE ';
var count = Library.count(data), step = 1;
for(var e in data){
sql += e+'='+data[e];
if(count > step){
sql += ' AND ';
}
step++;
}
}
console.log(sql);
};
this.countGroup = function(data){
if(this.error({count: data})){
return false;
}
var sql = 'SELECT ', partSql = ' WHERE ', colSql = '';
var count = Library.count(data), step = 1, contrl = false;
for(var e in data){
var index = 0;
sql += e;
colSql += e;
if(contrl && Library.count(data[e]) > 1){
partSql += ' OR ';
}
contrl = true;
for(var k in data[e]){
partSql += e+'='+data[e][k];
if(Library.count(data[e]) > index+1){
partSql += ' OR ';
}
index++;
}
if(count > step){
sql += ', ';
colSql += ', ';
}
step++;
}
sql += ', COUNT(*) FROM '+this.db.name+partSql+' GROUP BY '+colSql;
console.log(sql);
};
this.getQuery = function(sql){
connection.query(sql, function(error, result, fields) {
console.log(result);
});
};
this.error = function(data){
result = false;
for(var e in data){
switch(e) {
case 'data':
if(data[e] != undefined){
if(Object.prototype.toString.call(data[e]) == '[object Array]'){
console.log(this.systemErrors[1]);
return true;
}
for(var n in data[e]){
if(this.db.cols[n] == undefined){
console.log(this.systemErrors[0]+n);
return true;
}
else if(typeof data[e][n] != this.db.cols[n]){
console.log(this.db.label[n]+this.systemErrors[3]+' '+this.db.cols[n]);
return true;
}
}
}
break;
case 'cols':
if(data[e] != undefined){
if(Object.prototype.toString.call(data[e]) != '[object Array]'){
console.log(this.systemErrors[2]);
return true;
}
for(var n in data[e]){
if(this.db.cols[data[e][n]] == undefined){
console.log(this.systemErrors[0]+data[e][n]);
return true;
}
}
}
break;
case 'count':
if(data[e] != undefined){
if(Library.count(data[e]) == 0){
console.log(this.systemErrors[4]);
return true;
}
if(Object.prototype.toString.call(data[e]) == '[object Array]'){
console.log(this.systemErrors[1]);
return true;
}
for(var n in data[e]){
if(this.db.cols[n] == undefined){
console.log(this.systemErrors[0]+n);
return true;
}
for(var j in data[e][n]){
if(typeof data[e][n][j] != this.db.cols[n]){
console.log(this.db.label[n]+this.systemErrors[3]+' '+this.db.cols[n]);
return true;
}
}
}
}
else{
console.log(this.systemErrors[4]);
return true;
}
break;
}
}
};
};