【问题标题】:node js function return [object Object] instead of a string valuenode js函数返回[object Object]而不是字符串值
【发布时间】:2016-03-19 19:14:48
【问题描述】:

我对 java 脚本和节点 js 很陌生, 我试图从 MySQL DB 中获取一个值,返回值是 [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 或表中的任何列)从中获取值。
  • 你用的是什么库?节点mysql?
  • 如果您想查看对象的结构,请尝试调用 console.log(row) (不附加任何字符串)或将其转换为字符串(您可以使用 JSON.stringify(row) )
  • (或将其作为单独的参数记录:console.log('row is:', row)(注意逗号))
  • 顺便说一句。不要像这样连接查询。它容易受到sql注入

标签: javascript node.js function callback


【解决方案1】:

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

objectName.propertyName

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

JSON.stringify(objectName);

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

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

查看整个对象。虽然你必须在文件中需要 util。


也许你有类似的东西:

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

问题在于它将 myObject 转换为控制台中的字符串,例如使用myObject.toString()。 在这种情况下,您可以让自己更轻松,并像这样将其分开:

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

控制台现在可以解释myObject 并很好地显示它。

【讨论】:

  • 这不适用于 Node 的console.log(),它会(通常)在每个参数上使用util.inspect(),而不是简单地调用.toString()。 FWIW,如果你想记录 JSON,你也可以使用console.log('%j', obj)
  • 嗯,我不知道 JSON 的事,很好 :)
【解决方案2】:

我也遇到了这个问题,在 node.js 终端中结合“watchman-make”运行以下代码(watchman-make:请参阅https://www.quora.com/What-IDEs-are-available-for-node-js-development-on-Linux 的第一个答案中的 cmets)。

以下代码(显示了 node.js 输出)说明了接受的答案/cmets 中的要点:

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]' ?
// http://stackoverflow.com/questions/34264800/node-js-function-return-object-object-instead-of-a-string-value

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}}}}}

【讨论】:

    【解决方案3】:

    使用以下选项之一:

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

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2014-07-11
      • 2022-11-03
      • 2018-10-15
      相关资源
      最近更新 更多