提问人:Florian Rahmann 提问时间:11/9/2022 更新时间:11/9/2022 访问量:848
nodeJS - 无法设置 undefined 的属性
nodeJS - Cannot set property of undefined
问:
我知道这个问题可能会在这里被问到 1000 次,但我在我的脚本中找不到错误。 我正在尝试遍历 2 个数组以从 each() 循环中的 city_id 和 organisation_id 中获取名称。我想将值写入“mother”对象,以便在一个地方获取所有信息。这是我到目前为止编写的代码:
let express = require('express');
let router = express.Router();
let request = require('request');
let connection = require('../lib/mysql');
router.get('/', function(req, res) {
if(req.session.loggedin === true){
getList((err, finlist) => {
console.log(finlist)
});
} else {
const cssPath = '/stylesheets/style.css'
res.render('login', { cssPath, title: 'Login' });
}
});
function getList(callback) {
var result = [];
connection.query('SELECT * FROM lists ', (err, rows) => {
if(err) throw err;
var r=0;
rows.forEach(function(item) {
result[r] = item;
getCities((err, cty) => {
result[r].city = cty[item.city_id].name;
getOrganisations((err, org) => {
result[r].organisation = org[item.organisation_id].name;
});
callback(result);
});
r++;
});
});
}
function getCities(callBack) {
var result=[];
connection.query('SELECT * FROM cities ', (err, rows) => {
if (err) throw err;
rows.forEach(function (cty) {
result[cty.id] = cty;
});
if (err) {
callBack(err, null);
} else {
callBack(null, result);
}
});
}
function getOrganisations(callBack) {
var result=[];
connection.query('SELECT * FROM organisations ', (err, rows) => {
if(err) throw err;
rows.forEach(function(org) {
result[org.id] = org;
});
if (err) {
callBack(err, null);
} else {
callBack(null, result);
}
});
};
module.exports = router;
我总是收到错误
TypeError: Cannot set properties of undefined (setting 'city')
at /opt/alarmprocessor/routes/settings.js:53:32
. . .
这是哪条线result[r].city = cty[item.city_id].name;
国王问候帮助我:)
尝试将其设置为数组,作为对象,使控制台输出无处不在......似乎一切都很好。.也许我对 NodeJS 太陌生了,所以它还没有在我的脑海中点击;D
答:
0赞
Paul-Marie
11/9/2022
#1
发生此错误的原因是第 53 行不存在。它被声明了,但并不“存在”——>它是 .如果您只执行第 52 行,您将得到一个 ,并且您不能将属性(如 )设置为值。
快速解决方法是使用可选的链接,如下所示:result[r]
undefined
console.log(result[r]);
undefined
city
undefined
result[r]?.city = cty[item.city_id].name;
它不会修复你的代码,它只会通过忽略赋值来停止崩溃。
评论