首先,我是node / JSON的新手,因此在阅读时请考虑到这一点。
此代码的目的是从SQL Server数据库中获取数据,并能够访问它提取的元素。例如,它将提取数千个parentaccID ID,而我只想访问其中之一。
我已经浏览了整整一天的论坛,试图从我的nodejs函数访问JSON元素,并且每次尝试访问这些元素之一时,都会遇到“未定义”错误。作为最后的手段,我在这里。
我已经检查过几次,以查看记录集已被解析,并且看来它已被解析。
下面是我的代码,并且一个非常小的JSON代码示例即将结束。
我已经注释了我出错的地方。
function getEmp() {
var conn = new sql.ConnectionPool(dbConfig);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
return;
}
req.query("SELECT * FROM parentaccount Where accountname like 'Titan%' FOR JSON PATH", function (err, recordset) {
if (err) {
console.log(err);
}
else {
const Test1 = recordset[0].ParentAccountId; //error here
console.log(Test1);
}
conn.close();
})
})
}
getEmp();
//EXAMPLE JSON
{ recordsets: [ [ [Object] ] ],
recordset:
[ { 'JSON_F52E2B61-18A1-11d1-B105-00805F49916B':
'[{"ParentAccountId":4241411,"AccountName":"Titan"} ],
output: {},
rowsAffected: [ 3 ] }
ERROR:
TypeError: Cannot read property 'ParentAccountId' of undefined
at C:\Users\za47387\Desktop\Excel Export Code\test2.js:31:48
at _query (C:\Users\za47387\node_modules\mssql\lib\base.js:1347:9)
at Request.tds.Request.err [as userCallback] (C:\Users\za47387\node_modules\mssql\lib\tedious.js:671:15)
at Request.callback (C:\Users\za47387\node_modules\tedious\lib\request.js:37:27)
at Connection.endOfMessageMarkerReceived (C:\Users\za47387\node_modules\tedious\lib\connection.js:2104:20)
at Connection.dispatchEvent (C:\Users\za47387\node_modules\tedious\lib\connection.js:1084:36)
at Parser.tokenStreamParser.on (C:\Users\za47387\node_modules\tedious\lib\connection.js:914:14)
at Parser.emit (events.js:189:13)
at Parser.parser.on.token (C:\Users\za47387\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
at Parser.emit (events.js:189:13)
答案 0 :(得分:0)
根据您分享的样本,
recordset [0]未定义,表示两个选项之一:
a)查询结果未获取任何行。 b)查询结果的格式与预期的格式不同。
尽管我怀疑a),但它可以很好地控制输出。在尝试访问ParentAccountId之前,请先运行以下代码。
console.log('output : ', JSON.stringify(recordset, null, 4));
我也将代码重构为:
const Test1 = (Array.isArray(recordset) &&
recordset.length) ? recordset[0].ParentAccountId : null;
以便该错误不会使nodejs进程崩溃。