我正在开发Angular应用程序..为此,我正在使用node.js express作为后端。但我遇到了错误。我知道在应用条件的if条件语句中出现此错误
这是检查json中的字段是否存在的正确方法吗?
(!( typeof result[0].fUserPwd == undefined ))
我在此代码段下方包含了错误。
var express = require('express');
var router = express.Router();
var sql = require('mssql');
var db = require('../db/db');
let jwt = require('jsonwebtoken');
router.get('/login/:fUserID/:fUserPwd', async function (req, res) {
var strquery = "select fUserPwd from tblUser where fUserID ='" + req.params.fUserID + "'";
console.log(strquery);
const result = await db.executeQuery(strquery, res);
if (!( typeof result[0].fUserPwd == undefined )){
var pwd = result[0].fUserPwd
if (req.params.fUserPwd == pwd) {
let User = {
strUserID : req.params.fUserID,
strUserPwd : req.params.fuserPwd };
let token = await jwt.sign(User, global.config.secretKey, {
algorithm: global.config.algorithm,
expiresIn: '180m'
});
console.log("Token Generated : " + token);
res.status(200).json({
token, auth: true
});
} else {
res.status(401).json({
token: '0' , auth: false
});
}
} else{
res.status(401).json({
token: '0' , auth: false
});
}
});
(节点:5048)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性'fUserPwd' 在/home/naseef/Desktop/ClearDesk/CD_ERP/backend/routes/clsCommon.js:11:29 (节点:5048)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:4)
答案 0 :(得分:1)
似乎result[0]
也是未定义的,这就是为什么出现错误Cannot read property 'fUserPwd' of undefined
的原因,因此您必须添加另一个条件来检查result[0]
是否为对象
if (typeof result[0] !== 'undefined' && typeof result[0].fUserPwd !== 'undefined')
// simplified
if (result[0] && result[0].fUserPwd)
请记住,typeof运算符总是返回一个指示操作数类型的字符串
答案 1 :(得分:0)
我替换了现有条件...之所以起作用,是因为我只是fUserPwd值..因此,如果查询中没有fUserPwd ...,那么结果将为空
如果((结果==空))