未定义错误:检查对象/ Json中是否存在字段

时间:2019-04-22 09:40:53

标签: node.js

我正在开发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)

2 个答案:

答案 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 ...,那么结果将为空

如果((结果==空))