函数未在节点js中返回正确的值

时间:2019-07-12 07:54:58

标签: javascript node.js sqlite

我想检查是否使用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与我的问题无关。

0 个答案:

没有答案