Node.js npm mssql 函数返回未定义

Node.js npm mssql function returning undefined

我正在使用 mssql 和 node.js 连接到 sql 服务器数据库。我试图通过将连接代码包装在一个具有一个查询参数的函数中来减少代码。当我在 router.get 函数中调用函数时,它 returns undefined.

如有任何帮助,我们将不胜感激。

function sqlCall(query) {
  var connection = new sql.Connection(config, function(err) {
    if (err) {
      console.log("error1");
      return;
    }

    var request = new sql.Request(connection); // or: var request = connection.request();
    request.query(query, function(err, recordset) {
      if (err) {
        console.log("error2");
        return;
      }

      return (recordset);
    });
  });
}

路由器代码

router.get('/', function(req, res) {

  var queryString = "select * from .....";

  res.json(sqlCall(queryString));

  //sqlCall(queryString)

});

您试图将 sqlCall 视为具有 return 值的同步函数,而相反的 request.query 函数是异步函数,需要回调。

由于 Node.js 使用非阻塞 IO 和回调结构进行流量控制,因此使用基于回调的异步结构是可行的方法。在你的情况下,这可能是这样的:

router.get('/', function(req, res) {


  var queryString = "selec * from .....";
  sqlCall(queryString, function(err, data) {
     if (typeof err !== "undefined" && err !== null) {
       res.status(500).send({
         error: err
       });
       return;
     }

     res.json(data);
  });
});

你的其他组件看起来像这样:

function sqlCall(query, cb) {
  var connection = new sql.Connection(config, function(err) {
    if (typeof err !== "undefined" && err !== null) {
      cb( err );
      return
    }

    var request = new sql.Request(connection); // or: var request = connection.request();
    request.query(query, function(err, recordset) {
      cb( err, recordset );
    });

  });

}