业余时间玩nodejs的时候遇到点蛋疼的情况, 在使用mysql模块(https://github.com/felixge/node-mysql)连接mysql操作, 想在update, delete语句的时候, 想知道到底update, delete成功了没有.
在mysql中直接进行这样的判断的方法是使用row_count(), 这一条语句要紧跟着你执行的sql语句后面. 而Nodejs的i/o都是异步的于是这就产生了一个问题, 不太好判断row_count()到底是哪句sql执行的结果. 粗略的扫了一眼文档, 文档中并没有描述这个问题. 本想函数嵌套来达到同步的效果的, 却无意发现在执行sql对应的异步函数中的参数中有 affectedRows字段, 经测试, 这货就是row_count()的结果.
代码片段如下:
var cmd = ‘UPDATE users SET ‘ + field + ‘ = ‘ + value + ‘ WHERE id = ‘ + userid; console.log(cmd); db.query(cmd, function(err, rows, fields){ var affectedRows = rows.affectedRows; if(err || affectedRows){ var msg = ‘update ‘ + field + ‘ error‘; logger.error(msg); res.send({ ‘code‘: 500, ‘state‘: ‘failure‘, ‘msg‘: msg, ‘data‘: null }); return; } res.send({ ‘code‘: 200, ‘state‘: ‘success‘, ‘msg‘: ‘updated‘, ‘data‘: null }); });