koa2链接数据库的时候写了如下两个方法:
insertUser: (account, password) => new Promise((resolve) => {
connection.query(command.insertUser, [account, password], (err, ret) => {
if(err) {
console.log('[insertUser error!]:', err);
return reject(err);
}
resolve(ret);
});
}),
selectUser: account => new Promise((resolve) => {
connection.query(command.selectUser, [account], (err, ret) => {
if(err) {
console.log('[selectUser error!]:', err);
return reject(err);
}
resolve(ret);
});
})
但是在处理函数中使用await获取mysql中的数据之后,数据可以获取到,但是ctx.body无法赋值了,前端也一直返回404
try {
result = await Mysql.selectUser(register_user_name);
} catch(e) {
console.log('[select user error]:', e);
}
if(result && result[0]) {
ctx.body = {
code: 102,
data: {
errMessage: '用户已存在'
}
};
return;
}
不知道哪里出了问题,result数据是可以获取到的,if语句也正常执行了,只有ctx.body无法执行,node也没有报错,只有前端一直返回404。
换成await Promise.resolve(10)
也是一样后面的ctx.body无法执行,但是await Promsie.reject(10)
的话是可以走到catch里面的。
数据库都可以正常读写,就是无法返回数据。
nodejs版本是8.1.4,在await之前执行ctx.body都是可以正常运行的,之后就不可以了。
求大神帮忙看看哪里出了问题
await Promise.resolve(10)
后面的ctx.body
无法执行是正常的,因为result && result[0]
这个判断中的result[0]
判 false,所以进不到 if 里面。估计原代码中也是判断那里出了问题,在 if 之前加句话调试下
另外,建议加个
else
分支处理正确的情况(或者在if () {}
之后,因为 if 分支中return
了)。