【问题标题】:Connection.query function is being skipped and not executed within if statementConnection.query 函数被跳过并且不在 if 语句中执行
【发布时间】:2020-02-06 09:14:55
【问题描述】:

我已经设置了几个快速端点来使用节点和角度构建考勤登记系统,一切正常,除了在“/punchin”端点中,我在 if 语句中使用了几个 connection.query 函数正在被跳过而不被执行

我尝试过使用 promise,con.query(sqlQuery).then().catch(),它不起作用

app.post('/punchin',(req,res)=>{

const checkIfIdExists='SELECT uid FROM registerTbl WHERE uid="'+req.body.inData+'"'
    con.query(checkIfIdExists,(err,result)=>{
        if(result[0]===undefined)
        {
            return console.log('The entered unique id does not exist in our database')
        }
    })
        const checkIfStatIsUndefined='SELECT attendanceStatus FROM userAttendanceLog WHERE uid="'+req.body.inData+'" '
        con.query(checkIfStatIsUndefined,(err,result)=>{
            console.log(result)
            console.log(checkIfStatIsUndefined)
            if(!result[0])
            {
                console.log('line 68')
                const selectLogDetailForNewUser='SELECT name,uid FROM registerTbl WHERE uid="'+req.body.inData+'"'
                console.log('line 70' +selectLogDetailForNewUser)
                con.query(selectLogDetailForNewUser,(err,result)=>{
                    console.log('line 80' + sel)
                    console.log(result+'line 81')
                    const updateStatusForNewUser='INSERT INTO userAttendanceLog (name,uid,attendanceStatus) VALUES ("'+result[0].name+'","'+req.body.inData+'","1")'
                    con.query(updateStatusForNewUser,(err,result)=>{
                        if(err)
                        {
                            return console.log("Error in Posting")
                        }
                        res.send('Status updated')
                    })     
                })


            }


        })

预期的结果应该是if语句中的2个connection.query函数应该被执行,但事实并非如此。

【问题讨论】:

  • 哪个查询正在执行,哪个没有执行??

标签: mysql node.js


【解决方案1】:

你有条件说如果这个查询的值是一个空数组并且零索引中没有对象,执行条件。但是当结果有一个值时,真正的结果是假的 ! 不运行它。所以结果一定是不符合条件的值。

如果结果.length == 0

console.log(result[0]) // undefined

并且在 javaScript 中不是 undefined 是真的

console.log(!result[0]) // true

所以条件不适用,但如果结果有信息:

console.log(result[0]) // query result data

结果中的数据和对象数组主要在条件下为真,而不是为假,不应该执行 if 语句

console.log(!result[0]) // false

如果您运行它,请删除! 标记或更改您的执行条件。

var mysql = require('mysql');

var con = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: 'yourPass',
    database: 'test'
});
function f() {
    con.connect(function (err) {
        if (err) throw err;
        console.log("Connected!");


        const checkIfIdExists = 'select 1 + 1'
        con.query(checkIfIdExists, (err, result) => {
            console.log(1, result)
            if (true) {
                return console.log('The entered unique id does not exist in our database')
            }
        })
        const checkIfStatIsUndefined = 'select 10 + 10 '
        con.query(checkIfStatIsUndefined, (err, result) => {
            console.log(10, result, result[0], !result[0])
            if (result[0]) {
                const selectLogDetailForNewUser = 'select 100 + 100'
                con.query(selectLogDetailForNewUser, (err, result) => {
                    console.log(100, result, err)
                    console.log("baba" + sel);
                    const updateStatusForNewUser = 'select 1000 + 1000'
                    con.query(updateStatusForNewUser, (err, result) => {
                        console.log(1000, result)
                        if (err) {
                            return console.log("Error in Posting")
                        }
                        //res.send('Status updated')
                    })
                })
            }
        })
    });
}

console.log(f());

【讨论】:

  • 您好先生@mohammad Javad shmadi,我已经尝试过您所说的,先生。我用了if(result[0]===undefined),if语句有效,但是con.query函数没有执行
  • 哪个con.query?您的代码中有很多 con.query 吗?你说预期的结果应该是if语句中的2个connection.query函数应该被执行。
  • 就在console.log('line 68') 先生之后,我的意思是,console.log 行正在执行但不是console.log 行之后的2 con.query 函数('第 68 行')
  • 在两个回调中获取 console.log(err),用什么打印它们?将所有代码放入try{} catch(e){} 并在catch 范围内登录e?
  • 我试过了,还是不行,先生,看来,即使在try块内部,函数也没有执行,catch也没有显示任何错误,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多