【问题标题】:Why is the response object being returned with multiple parameters when it doesnt appear to take any?为什么响应对象似乎不带任何参数时返回多个参数?
【发布时间】:2020-09-14 06:24:41
【问题描述】:

我刚开始学习使用 Node、Express 和 MySQL 创建 rest API。我有我的函数 removeAll 不带参数,它将结果对象传递给箭头函数,然后运行一个 sql 函数,然后将另一个函数作为参数(err,res)。在嵌套箭头函数内部,如果我们没有任何错误并且受影响的行不等于 0,我们将得到返回 (null, res) 的结果。现在我的困惑是为什么结果包含 (null, res) 而不仅仅是 res。我也对实际如何分配 res 感到困惑,我看到它被传递到箭头函数中,但我们没有明确设置 res 是什么。

  sql.query("DELETE FROM customers", (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(null, err);
      return;
    }
    if (res.affectedRows == 0) {
      // customer not found with the id
      result({ kind: "not_found" }, null);
      return;
    }
    console.log("deleted customer with id: ", id) {
        result(null, res);
    }
  });
};

【问题讨论】:

    标签: node.js rest express


    【解决方案1】:

    result是一个节点风格的回调,其中第一个参数是错误(如果有;如果没有错误,第一个参数是null),第二个参数是结果(如果没有遇到错误) .

    一般方法与您使用的sql.query 回调非常相似:

    sql.query("DELETE FROM customers", (err, res) => {
    

    就像 its 回调如何首先定义错误参数,然后定义结果,您同样希望调用result,将错误作为第一个参数,或者将结果作为第二个参数参数。

    也就是说,result 是一个非常容易混淆的变量名称 - 它是一个回调,而不是包含数据的结果,因此您可能希望将其重命名为更合适的名称,以减少潜在的混淆。

    我也对 res 的实际分配方式感到困惑

    它由sql.query 的内部处理。当查询成功解析时,它将执行类似callback(null, results) 的操作。当查询失败时,它将执行callback(someError) 之类的操作。 callback 是您传递给sql.query 的回调。

    【讨论】:

      【解决方案2】:

      现在我的困惑是为什么结果包含 (null, res) 而不仅仅是 res。

      这是老式 Node.js 回调工作的标准方式:第一个参数是错误或 null,如果第一个参数不是错误,则第二个参数包含调用“返回”的数据.

      如今,您会使用 Promise,但这就是旧式回调的工作方式。

      我也对实际如何分配 res 感到困惑,我看到它被传递到箭头函数中,但我们没有明确设置 res 是什么。

      sql.query 函数调用了您传递给它的回调。这就是res 的来源,它是数据库操作的结果。 sql.query 也遵循标准的老式 Node.js 回调模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2016-03-04
        • 2018-08-26
        • 1970-01-01
        • 2020-04-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-02
        相关资源
        最近更新 更多