【问题标题】:nodejs npm mysql return single row handlenodejs npm mysql 返回单行句柄
【发布时间】:2015-07-15 06:29:44
【问题描述】:

我正在使用nodenpm mysql 做一些数据库工作。

如果我知道我只会收到一行,有什么方法可以避免使用result[0]

connection.query({
    sql: "SELECT spend FROM `account` WHERE `name` = ? order by date desc limit 1",
    values: [market.name]
    }, function (error, results, fields) {
        market.fee = results[0].age;
        resolve(market);
    });

【问题讨论】:

    标签: javascript mysql node.js node-mysql


    【解决方案1】:

    connection.query 的回调函数返回三个值,其中第二个是查询的结果集,因此是一个值数组

    因此,即使您确定结果集只包含一条记录,您也必须使用 result[0]

    此外,它有点查询自己的规范,决定应该返回什么样的数据。 mysql 的 SELECT 以这种方式工作(尽管您可以限制记录),这与 mongodb 的 db.collection.findOne() 不同,查询本身知道它总是会返回一条记录

    【讨论】:

      【解决方案2】:

      您还可以使用数组解构从结果参数中解压缩第一行:

      const sql = "SELECT age FROM `account` WHERE `name` = ? order by date desc limit 1";
      
      connection.query({ sql, values: [market.name] }, function (error, [account], fields) {
          market.fee = account.age;
          resolve(market);
      });
      

      或者疯狂地加入一些对象解构:

      const sql = "SELECT age FROM `account` WHERE `name` = ? order by date desc limit 1";
      
      connection.query({ sql, values: [market.name] }, function (error, [{ age }], fields) {
          market.fee = age;
          resolve(market);
      });
      

      另一个重构,做同样的事情,但使用简洁的主体箭头函数并将market传播到一个具有fee的新对象中,映射到输入参数[{ age: fee }]中。

      connection.query(
        { 
          sql: "SELECT age FROM `account` where `name` = ? order by date desc limit 1", 
          values: [market.name] 
        }, 
        (error, [{ age: fee }], fields) => resolve({ ...market, fee })
      );
      

      【讨论】:

        猜你喜欢
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多