Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从节点mssql执行函数返回数据_Javascript_Sql Server_Node.js_Npm - Fatal编程技术网

Javascript 从节点mssql执行函数返回数据

Javascript 从节点mssql执行函数返回数据,javascript,sql-server,node.js,npm,Javascript,Sql Server,Node.js,Npm,我正在使用mssql(用于Node.js的Microsoft SQL Server客户端)来自npm的包。我正在尝试执行驻留在sql server数据库中的存储过程。一切正常。但是,我要做的是返回记录集,以便将其导出到其他模块中使用。下面是我尝试做的 function monthlyIceCreamSalesReport (scope){ var connObj = connConfig(); connObj.conn.connect(function(err){ if(err){

我正在使用mssql(用于Node.js的Microsoft SQL Server客户端)来自npm的包。我正在尝试执行驻留在sql server数据库中的存储过程。一切正常。但是,我要做的是返回记录集,以便将其导出到其他模块中使用。下面是我尝试做的

function monthlyIceCreamSalesReport (scope){
var connObj = connConfig();
connObj.conn.connect(function(err){
    if(err){
        console.log(err);
        return;
    }
    connObj.req.input('Month',4);
    connObj.req.input('Year',2016);

    connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue){
        if(err){
            console.log(err);
        }
        else {
            console.log(recordsets[0]); // successfully receiving the value
        }
        connObj.conn.close();
    });
  });
  console.log('check for recordsets', recordsets[0]); // undefined
  return recordsets[0];
}
var sqlServerObj = {
    monICSalesReport : monthlyIceCreamSalesReport,
};
module.exports = sqlServerObj;
功能月YiceStreamSalesReport(范围){
var connObj=connconconfig();
connObj.conn.connect(功能(错误){
如果(错误){
控制台日志(err);
回来
}
连接请求输入(“月”,4);
connObj.请求输入(2016年);
connObj.req.execute(“”,函数(错误,记录集,返回值){
如果(错误){
控制台日志(err);
}
否则{
console.log(记录集[0]);//成功接收值
}
connObj.conn.close();
});
});
console.log('检查记录集',记录集[0]);//未定义
返回记录集[0];
}
var sqlServerObj={
monICSalesReport:MonthlycStreamSalesReport,
};
module.exports=sqlServerObj;

如代码段所示,由于记录集[0]的值未定义,因此导出此函数没有任何用处。

记录集[0]
未定义,因为它仅在
connObj.req.execute
函数范围中定义。您可以这样做:

function monthlyIceCreamSalesReport (scope, cb){
 var connObj = connConfig();
 connObj.conn.connect(function(err){
   if(err){
      console.log(err);
      return cb(Error("Something wrong"));
  }
  connObj.req.input('Month',4);
  connObj.req.input('Year',2016);

connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue){
    if(err){
        console.log(err);
        connObj.conn.close();
        return cb(Error("Something wrong"));
    }
    else {
        console.log(recordsets[0]); // successfully receiving the value

        connObj.conn.close();
        return cb(recordsets[0]);
    }
  });
});

}

var sqlServerObj = {
   monICSalesReport : monthlyIceCreamSalesReport,
};

module.exports = sqlServerObj;
function monthlyiceStreamSalesReport(范围,cb){
var connObj=connconconfig();
connObj.conn.connect(功能(错误){
如果(错误){
控制台日志(err);
返回cb(错误(“出错”);
}
连接请求输入(“月”,4);
connObj.请求输入(2016年);
connObj.req.execute(“”,函数(错误,记录集,返回值){
如果(错误){
控制台日志(err);
connObj.conn.close();
返回cb(错误(“出错”);
}
否则{
console.log(记录集[0]);//成功接收值
connObj.conn.close();
返回cb(记录集[0]);
}
});
});
}
var sqlServerObj={
monICSalesReport:MonthlycStreamSalesReport,
};
module.exports=sqlServerObj;
在异步性质下,您不能以这种方式
返回
。您可以通过传递
回调
函数来获得它

试着给出这样一个回调函数

function monthlyIceCreamSalesReport(scope, callback) { // pass a callback to get value

    var connObj = connConfig();
    connObj.conn.connect(function(err) {
        if (err) {
            console.log(err);
            return;
        }
        connObj.req.input('Month', 4);
        connObj.req.input('Year', 2016);

        connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue) {
            if (err) {
                console.log(err);
            } else {
                console.log(recordsets[0]);
                connObj.conn.close();
                return callback(null, recordsets[0]); //return as a callback here and get that value in callback from where you called this function 
            }
        });
    });
 }
var sqlServerObj = {
    monICSalesReport: monthlyIceCreamSalesReport,
};
module.exports = sqlServerObj;
函数monthlyiceStreamSalesReport(作用域,回调){//传递回调以获取值
var connObj=connconconfig();
connObj.conn.connect(功能(错误){
如果(错误){
控制台日志(err);
回来
}
连接请求输入(“月”,4);
connObj.请求输入(2016年);
connObj.req.execute(“”,函数(错误,记录集,返回值){
如果(错误){
控制台日志(err);
}否则{
console.log(记录集[0]);
connObj.conn.close();
return callback(null,记录集[0]);//在此处作为回调返回,并在调用此函数的回调中获取该值
}
});
});
}
var sqlServerObj={
monICSalesReport:MonthlycStreamSalesReport,
};
module.exports=sqlServerObj;

注意:查看注释以了解更改

这是一种异步方法,您无法从中返回。您需要回调或等效的回调。@BenFortune修复了的可能副本