我使用 mssql 和 node.js 连接到 sql server 数据库。我试图通过将连接代码包装在具有一个查询参数的函数中来减少代码。当我从 router.get 函数中的 with 调用该函数时,它返回未定义。
任何帮助将非常感激。
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
相反的函数是一个异步函数,需要回调。
由于 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 );
});
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)