CNode

一个mysql的的奇怪问题

Bbeiyio发布于13 年前最后回复13 年前13 回复9138 浏览0 收藏
var mMysql = require('mysql');


function Select(aWhere,aCallback)
{
mConnection.query("select *from "+aWhere,
function (err, results, fields) {
	return aCallback(results,fields);
});
}

另外一个类里调用处

mMySql.Select(tTableName,function (a_results,a_fields )
{
     if(a_results.length!=0)
     {
        .....//省略若干
     }
});

现象:同样的参数调用,有的时候程序正常,有的时候会提示a_results.length错误,原因是results 为undefined 是在是不知道是怎么回事,希望路过的高手指点下

查看回复

回复 (13)

L
leapon#1·13 年前

SQL 不正确

"select *from "+aWhere
C
cgwang#2·13 年前

在Select 函数里面加一些有效性判断比较好: err 是否是 undefined, results是否是undefined results的长度判断 等等。

B
beiyio#3·13 年前
引用 leaponSQL 不正确 "select from "+aWhere

应该不是SQL不正确,参数是我写死的,每次穿进去的都一样

B
beiyio#4·13 年前

不好重现,恶心死了

B
beiyio#5·13 年前

求解答呢

L
leapon#6·13 年前
引用 beiyio不好重现,恶心死了

用 node-inspector 加断点。出现错误的时候 debug。你的程序没贴全,别人也没法替你测试。 那个 "select *from " 是怎么回事?你的程序里不会这么用吧?

B
beiyio#7·13 年前
引用 beiyio不好重现,恶心死了

@leapon 是这么用的啊,这么用有什么问题么

L
leapon#8·13 年前
引用 beiyio不好重现,恶心死了

@beiyio

星号和FROM中间有空格

SELECT * FROM table_name

http://www.w3schools.com/sql/sql_select.asp

B
beiyio#9·13 年前

输出了一下error

{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect', fatal: true }

看错误貌似是连接重连了,但是不清楚是什么原因造成的,

B
beiyio#10·13 年前
L
leizongmin#11·13 年前
function Select(aWhere,aCallback) {
  mConnection.query("select *from "+aWhere, function (err, results, fields) {
    if (err) throw new Error('记得检查这个err变量,如果err不为null,results和fields可能为空的');
    return aCallback(results,fields);
  });
}

在Node.js中,大家基本上接受这样的约定:

  • 回调函数的第一个参数用来表示是否出错(如果出错了则为出错信息,否则设置为null),第二个参数起才是返回值。
  • 在回调函数内部,应该首先判断第一个参数(出错信息)是否不为空,如果回调是带有出错信息,那么后面的参数是不确定的(可能有,也可能没有)
  • 如果不按照这种约定来做,你就为后面的程序挖了个很大的坑,不知道什么时候就一脚踩上去了
  • 仔细看看Node.js内置模块的API文档,看看人家都是怎么做的
参与回复
登录后即可参与回复。登录