如何解决谁能告诉我为什么不管“ 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服务器的nodejs 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注入
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。