我有一个数据库类,其中包含一些方法,可以轻松地执行某些查询,而无需将值格式化为sql查询字符串。所以这是我的删除方法,脚本停止了。
// Other Module
let filter = {
url: 'http://www.example.com/some/route',
},
DB = new MySQL();
DB.delete(filter, 'found_urls').then(result => {
console.log('The row/s are deleted.');
}).catch(error => {
console.log('An error occured.');
console.log(error);
});
// MySQL.js
class MySQL {
// some methods....
delete(filter, table, operator = '=') {
// Parse where clauses and create query string.
let whereCondition = MySQL.parseColumnValue(filter, operator),
sql = `DELETE FROM ${table}`;
// whereCondition is an array: ["url = 'http://www.example.com/some/route'"]
if (whereCondition.length > 1) {
sql += ` WHERE ${whereCondition.join(' AND ')}`;
}
console.log(sql);
// I get "DELETE FROM found_urls WHERE url = 'http://www.example.com/some/route'"
return new Promise((resolve, reject) => {
console.log('You can see me.');
this.database.query(sql, (error, result) => {
console.log('You never see me because the script stopped.');
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
}
前几天它完美无缺但现在停止了。我不知道这段代码有什么问题。
更新
此类将用于webcrawler,因此我认为没有必要保护它以进行SQL注入。
表found_urls
有大约200行,没有锁定。
错误我发现了我的问题:另一个模块出现故障。如果没有此模块,则爬网程序正在运行(使用删除操作)。