我试图在变量中显示数据库值但不返回任何值。
下面是代码。
var mssql = require('mssql');
var resultData='';
function getStyleData(){
var msSqlSettings = {
server : 'localhost',
port : '51663',
user : 'sa',
password : 'admin1234',
database : 'ComWriter.Temp002'
};
mssql.close();
mssql.connect(msSqlSettings, function (err ) {
if (err) {
throw (err);
}
var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;
var request = new mssql.Request();
request.query(getQuery, function (err, rows) {
//console.log(rows);
mssql.close();
resultData = rows;
});
});
return resultData;
}
var getFunction = getStyleData();
console.log(getFunction);
答案 0 :(得分:0)
看起来您在调用connect之后立即返回resultData,可能在连接建立之前,以及查询返回结果之前。节点是异步的,所以它不会等待结果,尝试在request.query调用中的console.log行。
mssql.connect(msSqlSettings, function (err ) {
if (err) {
throw (err);
}
var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;
var request = new mssql.Request();
request.query(getQuery, function (err, rows) {
//console.log(rows);
mssql.close();
console.log(JSON.stringify(rows));
});
});
您可以将回调传递给getStyleData()并将此回调传递给request.query(),这样在查询完成时将以异步方式返回行。这样您就可以传入想要使用结果的回调。
getStyleDate(done){
// your code ...
mssql.connect(msSqlSettings, function (err ) {
if (err) {
throw (err);
}
var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;
var request = new mssql.Request();
request.query(getQuery, done);
});
}
答案 1 :(得分:0)
您无法以同步方式从回调(异步)返回数据
需要重构代码。
function getStyleData(callback) {
var msSqlSettings = ..//;
mssql.connect(msSqlSettings, function (err) {
if (err) {
callback("error message", null);
}
//query
request.query(getQuery, function (err, rows) {
resultData = rows;
if (err) {
callback("error message", null);
} else {
callback(null, resultDat);
}
});
});
}
getStyleData(function (err, data) {
if (err) {
console.log("error");
}
console.log(data);
});