谁能告诉我为什么不管“ if”条件的结果如何总是执行“ else”部分[node js]

问题描述

我有这条路线;

    router.get('/:specimenID',(req,res) => {
    const sampleID = req.params.specimenID;
    sql.connect(con,() => {
        const request = new sql.Request();
        const isValidSpecimenID = `SELECT CASE WHEN EXISTS
        (SELECT TOP 1 1 FROM Interface WHERE
             Interface.SpecimenID =`+ sampleID +`) THEN 1 ELSE 0 END`;
        const sqlQuery = `Select Interface.SpecimenID,Interface.Result,Interface.Range,Interface.ServerTime,Interface.AnalyzerCode from Interface 
        left join LabAnalyzerElements 
        on Interface.ElementID=LabAnalyzerElements.MappedElement 
        where Interface.AnalyzerCode = LabAnalyzerElements.AnalyzerID and Interface.SpecimenID =` + sampleID;
        request.query(sqlQuery)
        .then(results => {
            if (isValidSpecimenID == 1) {
                res.status(200).json({
                LISResults : results.recordset
            }); 
        }else {
                res.status(404).json({
                    Message: "invalid Specimen ID"
                });
            }
        })
        .catch(err => {
            res.status(400).json({
                message: err.message
            })
        })
    });
});

我希望响应基于标本存在或不存在,但我总是收到“ else”块的“标本ID无效”响应,我不知道为什么。

我在MSsql Management Studio中尝试了 isValidSpecimenID 变量查询,并且如果表中没有sampleID,它会返回'0',反之亦然

这是一个使用mssql和express服务器的nod​​ejs API。

任何建议将不胜感激。

解决方法

您检查查询字符串const User = new mongoose.Schema({ name: String,email: String,password: String },{autoIndex: true} ) ,它将返回false。

开始第一个查询,等待结果,然后对照记录集进行检查。

这是一个代码示例:

SELECT CASE WHEN EXISTS (SELECT TOP 1 1 FROM Interface HERE Interface.SpecimenID = + sampleID + ) THEN 1 ELSE 0 END == 1

但是毕竟,您需要评估是否确实需要第一个查询,对我来说,您似乎不必在额外查询中检查router.get('/:specimenID',(req,res) => { const sampleID = req.params.specimenID; //Add some validation for sampleID here to prevent sql injections sql.connect(con,() => { const request = new sql.Request(); const isValidSpecimenID = `SELECT CASE WHEN EXISTS ( SELECT TOP 1 1 FROM Interface WHERE Interface.SpecimenID = ${sampleID} ) THEN 1 ELSE 0 END`; const sqlQuery = ` SELECT Interface.SpecimenID,Interface.Result,Interface.Range,Interface.ServerTime,Interface.AnalyzerCode FROM Interface LEFT JOIN LabAnalyzerElements ON Interface.ElementID=LabAnalyzerElements.MappedElement WHERE Interface.AnalyzerCode = LabAnalyzerElements.AnalyzerID AND Interface.SpecimenID = ${sampleID}`; request.query(isValidSpecimenID) .then(result => { //check if your result is valid if(result === isValid) { return request.query(sqlQuery); } else { res.status(404).json({ Message: "invalid Specimen ID" }); } }) .then(results => { res.status(200).json({ LISResults : results.recordset }); }) .catch(err => { res.status(400).json({ message: err.message }) }) }); }); 。只要您的第二个查询正确,并且两个表之间的联接正确,那么如果没有Interface.SecimenID

提醒

请为您的输入变量添加一些验证字,如@Larnu所述,以防止SQL注入