2015-01-20 2 views
2

Я использую mssql с node.js для подключения к SQL-серверу db. Я пытаюсь уменьшить код, завернув код соединения в функцию с одним параметром запроса. Когда я вызываю функцию из с функцией router.get, она возвращает undefined.Node.js npm mssql function return 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) 
 

 
});

ответ

6

Вы пытаетесь лечить sqlCall как синхронной функции с возвращаемым значением, в то время как request.query функция на напротив - асинхронный s, ожидая обратного вызова.

Поскольку Node.js использует неблокирующие структуры ввода-вывода и обратного вызова для управления потоком, использование асинхронной структуры, основанной на обратных вызовах, является способом перехода. В вашем случае это может выглядеть следующим образом:

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

    }); 

} 
+0

благодаря exinferis, вы только что закончился мой поиск 10 часов для решения задачи, подобной этой. –

 Смежные вопросы

  • Нет связанных вопросов^_^