Node.js函数返回[object Object]而不是字符串值

17
我对Java Script和Node.js不太熟悉, 我正在尝试从MySQL数据库获取一个值,但返回的值是[object Object]而不是一个字符串。 我在网上没有找到任何答案来解决这个问题, 希望这里有人能够帮助。 行的值是[object Object]。 这是我的函数。
exports.getAllIdInfo=  function(dbConnection, tables ,id , callback){
        var tableName= tables[i];
        var tableVariable = tableName;
        var myQuery = 'SELECT time, ' + tableVariable + ' FROM ' + tableName + ' WHERE id= ' + id;
        var query = dbConnection.query(myQuery, function (err, row, result) {       
            console.log(query.sql);
            if (err) {
                console.log("getAllGoodIds error");
                console.error(err);
                return;
            }
            console.log("row is: " + row);
            callback(row);
        });
};

如果您的返回值意味着回调参数“row”,那么它很可能是一个包含行中键-值对的对象(我只能猜测,因为我不知道您正在使用哪个SQL库),这应该是您实际想要的:如果它是一个对象,您可以通过调用其属性(例如row.id和row.name或您在表中拥有的任何列)来从中获取值。 - Octav Zlatior
1
你在使用哪个库?node-mysql吗? - madox2
2
如果您想查看对象的结构,请尝试调用console.log(row)(不附加任何字符串)或将其转换为字符串(您可以使用JSON.stringify(row))。 - Octav Zlatior
(或将其作为单独的参数记录下来:console.log('row is:', row)(注意逗号)) - robertklep
1
顺便提一下,不要像这样连接查询。这会容易受到 SQL 注入攻击。 - madox2
4个回答

29

当存在具有键和值的对象时,日志中会出现 [object Object]。您可以使用点符号(.)访问对象中的属性,例如

objectName.propertyName
如果propertyName是另一个对象,它仍然会返回[object Object],因此您需要在其中查找另一个属性。 属性也可能包含方法(函数)。 如果您想获得对象的字符串版本以进行比较,例如,则使用
JSON.stringify(objectName);

当使用node和console.log时,如果您有一个深度嵌套的对象,您可能无法查看嵌套对象的内容。在这种情况下,您可以使用:

console.log(util.inspect(objectName, false, null));

查看整个对象。尽管您必须在文件中要求使用工具。


也许您有类似以下的内容:

const myObject = { hello: 'world' };
console.log('My object: '+myObject);

这样做的问题是,它会在控制台中将myObject转换为字符串,例如使用myObject.toString()

在这种情况下,你可以更轻松地进行分离,像这样:

const myObject = { hello: 'world' };
console.log('My object:', myObject);

现在控制台可以解释 myObject 并将其漂亮地显示出来。


6
对于Node的console.log()而言,这个观点不一定正确,因为它通常会对每个参数使用util.inspect()而不是简单地调用.toString()。顺便说一下,如果您想记录JSON,也可以使用console.log('%j', obj) - robertklep
1
嗯,我不知道JSON这个东西,很好 :) - Octav Zlatior

1
使用以下选项之一:

console.log("%o", yourObjName)
console.log(JSON.stringify(yourObjName))
console.log(JSON.stringify(yourObjName, null, 3))


1
我也遇到了这个问题,运行以下代码在node.js终端中与"watchman-make"一起使用(watchman-make:请参见https://www.quora.com/What-IDEs-are-available-for-node-js-development-on-Linux中第一个答案的评论)。
下面的代码(带有node.js输出)说明了接受答案/评论中提到的要点:
function arrayToList(array) {
  var list = {};
  for (var i = array.length - 1; i >= 0; i--) {
    list = {value: array[i], rest: list};
  }
  return list;
};

console.log(arrayToList( [1, 2, 3, 4, 5] ));
// { value: 1,
//  rest: { value: 2, rest: { value: 3, rest: [Object] } } }

// '[Object]' ?
// https://dev59.com/PFsX5IYBdhLWcg3wFsEa

var obj = arrayToList([1, 2, 3, 4, 5]);

console.log('%j', obj);
// {"value":1,"rest":{"value":2,"rest":{"value":3,"rest":{"value":4,"rest":{"value":5,"rest":null}}}}}

console.log(JSON.stringify(obj));
// {"value":1,"rest":{"value":2,"rest":{"value":3,"rest":{"value":4,"rest":{"value":5,"rest":null}}}}}

0

我认为JSON.stringify(yourObjName)是完美的解决方案。你可以在你的代码段中应用它。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接