Javascript 从节点mssql执行函数返回数据
我正在使用mssql(用于Node.js的Microsoft SQL Server客户端)来自npm的包。我正在尝试执行驻留在sql server数据库中的存储过程。一切正常。但是,我要做的是返回记录集,以便将其导出到其他模块中使用。下面是我尝试做的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){
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修复了的可能副本