节点 JS:TypeError:无法读取未定义的属性“forEach”

Posted

技术标签:

【中文标题】节点 JS:TypeError:无法读取未定义的属性“forEach”【英文标题】:Node JS: TypeError: Cannot read property 'forEach' of undefined 【发布时间】:2020-09-25 14:15:34 【问题描述】:

我得到 TypeError: Cannot read property 'forEach' of undefined。我不知道下面的代码有什么问题:

app.post("/entershop", (request, response)=>          

let username = request.body.uname;
let psw = request.body.psw; 

let rawdata = fs.readFileSync('mapping.json');
let rootdata = JSON.parse(rawdata);
let isvalid = false;
let shops = rootdata["shops"];

shops.forEach(function(shop) 
var password = shop[username][0];
if(password === psw) 
    
       console.log('successful login');

    
else 
    
       console.log('login unsuccessful');
    
  );
 );

网页中显示如下错误:

TypeError: Cannot read property 'forEach' of undefined
at app.post (/home/ubuntu/TheRandomShops/index_test.js:33:15)
at Layer.handle [as handle_request] (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/layer.js:95:5)
at next (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/layer.js:95:5)
at /home/ubuntu/TheRandomShops/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/index.js:335:12)
at next (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/index.js:275:10)
at serveStatic (/home/ubuntu/TheRandomShops/node_modules/serve-static/index.js:75:16)
at Layer.handle [as handle_request] (/home/ubuntu/TheRandomShops/node_modules/express/lib/router/layer.js:95:5

mapping.json 如下所示:


"owners":[
            "name":"Bala", "id":"1", "psw":"bala",
            "name":"Rohit", "id":"2", "psw":"Rohit"
           ],
"employees":[
            "name":"Krithi", "owners":"Bala", "psw":"Krithi",
            "name":"Kumar", "owners":"Rohit", "psw":"Kumar"
           ]
 

非常感谢您的帮助。

【问题讨论】:

您解析的数据没有shops 属性。有ownersemployees 属性,但没有shops。所以rootdata["shops"]undefined 见***.com/questions/11922383/… 让 rawdata = fs.readFileSync('mapping.json');让 rootdata = JSON.parse(rawdata);这两个需要一些时间,所以在这两个完成之前执行其余代码 @SfaheequeTP readFileSync 是...同步的。 【参考方案1】:

希望这能解决您的问题

app.post("/entershop", (request, response)=>          

let username = request.body.uname;
let psw = request.body.psw; 

let rawdata = fs.readFileSync('mapping.json');
let rootdata = JSON.parse(rawdata);
let isvalid = false;
let shops = rootdata["shops"]||[];

shops.forEach(function(shop) 
var password = shop[username][0];
if(password === psw) 
    
       console.log('successful login');

    
else 
    
       console.log('login unsuccessful');
    
  );
 );

【讨论】:

【参考方案2】:

rootdata 为空,因为您的数据中没有任何名为 shop 的内容

【讨论】:

以上是关于节点 JS:TypeError:无法读取未定义的属性“forEach”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的属性“地址”

这将返回未定义:(节点:3196)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“myArray”

(节点:14808)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“角色”

(节点:2724)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“第一个”

(节点:18560)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“typeFn”

(节点:10388)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“缓存”