Node.js读取数据库查询单个字段时抛出undefined错误求助
问题分析与解决办法
首先,你遇到的undefined错误根源很明确:你把数据库查询返回的数组结果转换成了字符串,然后试图把字符串当成数组/对象来访问属性。
具体问题点
util.inspect(result, false, null)这个方法的作用是把JavaScript对象转换成便于阅读的字符串形式,所以你赋值给temp的其实是一个字符串,而不是原有的查询结果数组。当你尝试temp[i][0]时,temp[i]是字符串里的单个字符,字符显然没有[0]这个属性,自然会抛出"无法读取undefined的属性'0'"的错误。
解决步骤
直接使用原始的
result数组
数据库驱动返回的result本身就是包含所有记录的数组,不需要用util.inspect转换。直接遍历它就行:con.query('select * from booktable', function(err, result){ if(!err) { // 直接遍历原始result数组 for(let i = 0; i < result.length; i++){ // 如果你的数据库驱动返回的是对象形式的记录(大部分情况) console.log("书名:", result[i].name); console.log("作者:", result[i].author); // 如果驱动返回的是数组形式的记录(比如每条记录是字段值的数组) // console.log("第一个字段值:", result[i][0]); } } });注意变量作用域
你的循环变量i没有用let或const声明,会变成全局变量,可能导致后续代码的意外问题,记得加上声明。统一数据库操作方式
你同时定义了mongoose的book模型,但又用了原生的con.query,这两种方式尽量不要混用。如果想用mongoose来操作,推荐用mongoose的查询API,代码会更简洁:// 用mongoose查询 book.find({}, (err, books) => { if(!err) { books.forEach(book => { console.log(`书名:${book.name},作者:${book.author}`); }); } else { console.error("查询出错:", err); } });
内容的提问来源于stack exchange,提问作者J. Davidson
相关产品推荐
相关产品推荐

