【问题标题】:Node JS Stored Procedure field values returning as undefinedNode JS 存储过程字段值返回为未定义
【发布时间】:2017-04-22 21:10:42
【问题描述】:

我是学习节点的新手,很抱歉提出一个菜鸟问题。 我有 mysql 正在运行并存储 proc 返回字段。 我想将值分配给字符串变量并循环遍历每一行。 我在 c# 中经常这样做,但我在节点上太菜鸟了。

控制台中的结果是。

console.log(one)  -> 
[RowDataPacket {

CitySearchSearchEngineID: 1,

SearchURL: 'https://www.url.com' } ]

 OkPacket {

  fieldCount: 0,......
}

不过,上面这个很好,

console.log(one.SearchURL); -> 未定义

我已经为此苦苦挣扎了一段时间,无法弄清楚为什么我无法获得价值。我尝试了几种不同的方法。如果我做 JSON.stringify 它会将行提供给一个字符串就好了。

任何想法都将不胜感激。

代码如下。

var db = mysql.createConnection({
   host: 'localhost',
   user: 'root',
   password: 'secretpassword',
   database: 'DB1',
   port: 3306
 });

 db.connect(function(err){
  if(err){
    console.log('Error connecting to Db');
    return;
  }
  console.log('Connection established');
});

db.query('CALL esp_Select_SearchURLs()', function(err, rows){
  if(err) throw err;

  _.each(rows, function(one){

    console.log(one);  // returns back in console the RowPacketData
    console.log(one.SearchURL); // returns back undefined.

  });
});

【问题讨论】:

  • 由于某种原因,您的one 似乎是数组,您可以添加日志console.log('one is %s isArray: %s', (typeof one), Array.isArray(one)),如果是,请尝试console.log(one[0].SearchURL)
  • console.log(one[0].SearchURL) 似乎确实有效。谢谢。现在我需要弄清楚如何只获取有数据的行。
  • OkPacket 的东西导致了我的大部分问题。
  • if(one.constructor.name != 'OkPacket') { console.log(one[0].SearchURL); }
  • 好,所以我把它作为答案

标签: node.js


【解决方案1】:

您的one 可能出于某种原因是一个数组,所以尝试console.log(one[0].SearchURL) 应该可以正常工作。

【讨论】:

    【解决方案2】:

    基本上,OkPacket 信息会干扰从数组中获取信息。

        if(one.constructor.name != 'OkPacket') { 
           console.log(one[0].SearchURL);
         } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多