【问题标题】:Express GET Request Results in Error: "res.send is not a function"Express GET 请求导致错误:“res.send 不是函数”
【发布时间】:2018-06-10 16:29:41
【问题描述】:

我正在尝试使用节点从 SQL Server 数据库中获取数据。我可以通过运行函数建立连接并获取数据,但我想将函数转换为 API 端点。

根据错误,在我看来 res 变量没有传递到最后一个 if 语句中,但我没有看到问题。

当 Postman 对该地址使用 GET 方法时,我收到 res.send is not a function 错误。

let mssqlQuery = function(query, res) {
  sql.connect(dbConfig, function(err) {
    if (err) {
      console.log("Error while connecting database :- " + err)
      res.send(err)
    } else {
      let request = new sql.Request();
      request.query(query, function(err, res) {
        if (err) {
          console.log("Error while querying database :- " + err)
          res.send(err)
        } else {
          res.send(res) // res.send is not a function
        }
      })
    }
  })
}

// GET API
app.get("/api/address", function(req, res) {
  var query = "select * from address"
  mssqlQuery(query, res)
})

res 变量的范围是否不正确,或者我的方法可能完全错误?

【问题讨论】:

  • request.query() 的内部 res 正在遮蔽函数的外部。改个名字就行了。
  • 能发个sn-p代码吗?我想我尝试了你所说的,但仍然犯了一个错误。您指的是第 8 行和第 13 行吗?我编辑了问题以反映我对您评论的理解。

标签: node.js rest api express postman


【解决方案1】:

正如@Sirko 所建议的那样, res 值被另一个变量所掩盖。更正后的代码:

let mssqlQuery = function(query, res) {
  sql.connect(dbConfig, function(err) {
    if (err) {
      console.log("Error while connecting database :- " + err)
      res.send(err)
    } else {
      let request = new sql.Request();
      request.query(query, function(err, resp) { // Changed res to resp
        if (err) {
          console.log("Error while querying database :- " + err)
          res.send(err)
        } else {
          res.send(resp) // res.send is not a function
        }
      })
    }
  })
}

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 2011-06-28
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多