Node.js NPM MSSQL函数返回未定义 [英] Node.js npm mssql function returning undefined

查看:119
本文介绍了Node.js NPM MSSQL函数返回未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用mssql和node.js来连接到SQL Server数据库.我试图通过将连接代码包装在具有一个查询参数的函数中来减少代码.当我在router.get函数中从with调用函数时,它返回未定义.

I am using mssql with node.js to connect to an sql server db. I am trying to reduce code by wrapping the connection code in a function with one query parameter. When I call the function from with in a router.get function, it 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视为具有返回值的同步函数,而相反的request.query函数是异步函数,期望回调.

You are trying to treat the sqlCall as a synchronous function with a return value, while the request.query function on the opposite is an asynchronous function, expecting a callback.

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

Since Node.js uses non blocking IO and callback structures for flow control, using an asynchronous structure based around callbacks is the way to go. In your case this could look like this:

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 );
    });

  });

}

这篇关于Node.js NPM MSSQL函数返回未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆