我想检查是否使用node.js正确执行了sqlite查询,以检查用户输入的名称是否已在使用中。
要做到这一点,我的第一个假设就是简单地检查查询的返回值(如果表中已经存在用户名,则为0
,否则为1
)。
/*some code*/
db.serialize (function () {
exports.run = function(query, message) {
db.run(query, function(err) {
if (err) {
console.error(err.message, );
return 0;
}
else{
console.log(message,": ", this.changes, "\n");
return 1;
}
});
}
});
/*some code*/
但是问题是,无论它返回什么undefined
,都会触发错误的行为。我还尝试检查查询是否抛出错误,但得到的结果相同。
/*some code*/
io.sockets.on('connection', function (socket) {
socket.on('send', function (data) {
if (data.type === 'notice') { //update the hasmap with the name
connectedSockets[socket.id] = data.nick;
var tmp = db.run(`insert into user(username, socket_id, member_of)
VALUES ("${data.nick}","${socket.id}",'default');`
, 'User added to the DB..' + " " + data.nick
+ " " + socket.id + " " + 'default');
if (tmp === 1) {
console.log(connectedSockets, "\n")
io.sockets.emit('message', data);
}
else {
data['invalid_name'] = true;
console.log(data.invalid_name, "TEST invalid_name");
socket.emit('message', data);
}
}
/*some code*/
第二次尝试:
/*some code*/
io.sockets.on('connection', function (socket) {
socket.on('send', function (data) {
if (data.type === 'notice') { //update the hasmap with the name
try{
console.trace( db.run(`insert into user(username, socket_id, member_of)
VALUES ("${data.nick}","${socket.id}",'default');`
,'User added to the DB..'+" "+data.nick
+ " "+socket.id+" "+'default'));
console.log(connectedSockets, "\n")
io.sockets.emit('message', data);
}
catch (e) {
data['invalid_name'] = true;
console.log(data.invalid_name, "TEST invalid_name");
socket.emit('message', data);
}
}
/*some code*/
我可能缺少明显的东西。任何想法?谢谢
编辑:它被标记为这篇文章How do I return the response from an asynchronous call?的重复,但是这篇文章不是初学者,也不友好,并且没有具体说明如何解决我的问题。 Ajax和XMLHttpRequest与我的问题无关。