Javascript Node.js npm mssql函数返回未定义
我正在使用带有node.js的mssql连接到sql server数据库。我试图通过将连接代码包装在一个带有一个查询参数的函数中来减少代码。当我从router.get函数中的with调用函数时,它返回undefined 任何帮助都将不胜感激Javascript Node.js npm mssql函数返回未定义,javascript,node.js,callback,node-mssql,Javascript,Node.js,Callback,Node Mssql,我正在使用带有node.js的mssql连接到sql server数据库。我试图通过将连接代码包装在一个带有一个查询参数的函数中来减少代码。当我从router.get函数中的with调用函数时,它返回undefined 任何帮助都将不胜感激 函数sqlCall(查询){ var connection=new sql.connection(配置、函数(错误){ 如果(错误){ 控制台日志(“错误1”); 返回; } var request=newsql.request(connection);/
函数sqlCall(查询){
var connection=new sql.connection(配置、函数(错误){
如果(错误){
控制台日志(“错误1”);
返回;
}
var request=newsql.request(connection);//或:var request=connection.request();
request.query(查询,函数(err,记录集){
如果(错误){
控制台日志(“错误2”);
返回;
}
返回(记录集);
});
});
}
您试图将sqlCall
视为一个具有返回值的同步函数,而对面的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 );
});
});
}
其他组件如下所示:
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 );
});
});
}
谢谢exinferis,你刚刚结束了我10个小时的搜索,寻找类似问题的解决方案。