这里向大家推荐一个叫做'easy-mysql-query'的模块,可以让MySQL查询结构更清晰,书写速度更快,并且减少语法错误。
首先,安装'easy-mysql-query'
npm install easy-mysql-query
引入模块
var emq = reqire('easy-mysql-query');
'easy-mysql-query'有两种工作模式:'execute'和'query'模式,分别对应“生成SQL查询并执行”功能和“生成SQL语句但不执行”功能。其中execute模式是默认模式。
可以通过以下两行代码切换模式。
emq.setMode('query');
emq.setMode('execute');
1 execute模式
在execute模式下,生成的MySQL查询会直接执行。参数如下:
emq(method, table, columns, selectors, callback);
例如:
emq('select', 'name', 'users', ['where age>', [20]], function (e, result) {
if (e) {
throw e;
}
console.log(result);
});
method
method包括四种:'insert', 'delete', 'update', 'select'
table
table是要处理的表名称
columns
columns是要查询/修改/插入的列名及对应的值
当我们执行insert时,如果columns涵盖了所有列且顺序一致,则columns可以是数组,如果只插入特定列,则必须是对象。如果表格只有一列,columns甚至可以是字符串。
columns = [101, 'TOM', 20, 10000];
emq('insert', 'users', columns, null, callback);
var columns = {
name: 'TOM',
age: 20,
salary: 10000
};
emq('insert', 'users', columns, null, callback);
在update状态下,columns必须是对象。
而在select状态下,要查询多列,columns必须为数组,只查询一列,columns可以是字符串。
selectors
按照一般SQL查询时的顺序将查询条件写入数组就可以了,如果要插入变量的话,只需将变量作为单独的元素,用逗号隔开即可。注意,如果要利用mysql模块自带的“防SQL注入”功能,请将变量放进数组中,这样就能与其它字符串进行区分。如果不想利用“防SQL注入”功能,则不需要特殊处理。
var selector = ['WHERE id=',[123],'AND age>',[20],'OR name LIKE',['Tom%'],'LIMIT',[5,5]];
callback
callback接收两个参数e, result,分别是SQL查询过程中抛出的错误和mysql模块查询返回的结果,通过传入callback function可以进行异步处理。
2 query模式
query模式下不需要传入callback,生成的query字符串会作为返回值返回。但注意,该模式下产生的报错也会直接抛出,请注意处理。其他的参数不变。
var selector = ['WHERE id=',[123]];
console.log(emq('select', 'users', 'name', selector));
// SELECT name FROM users WHERE id=123;
3 自动大写和自动空格功能
在进行SQL拼接的时候,我们经常要为了“该不该加空格”和“关键词大写”而大费周章。但是'easy-mysql-query'模块为我们包办了这些问题。selector中的数组元素开头结尾不需要加空格,模块会自动判断是否应该添加,且常见的关键词也会自动替换大写。