【发布时间】:2018-10-11 02:24:08
【问题描述】:
我有一个函数可以连接到 sql 数据库,对其进行查询,将结果格式化为 html 表并返回 html 变量:
function getData() {
return new Promise((resolve, reject) => {
var sql = require("mssql");
var dbConfig = {
server: "server",
database: "db",
user: "user",
password: "pw"
}
var conn = new sql.Connection(dbConfig);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
reject(err);
return;
}
req.query("SELECT * FROM table",
(err, recordset) => {
// Here we call the resolve/reject for the promise
try {
// If the results callback throws exception, it will be caught in
// the catch block
resolve(resultsCallback(err, recordset));
}
catch (e) {
reject(e);
}
}
);
conn.close();
});
})
}
function resultsCallback(err, recordset) {
var tableify = require('tableify');
if (err) {
console.log(err);
throw err;
}
else {
var html = tableify(recordset);
html = html.replace('<table>', '');
html = html.replace('</table>', '');
return html;
}
};
我这样称呼它:
getData().then((data)=>{console.log("Table data:",data);})
.catch((error)=>{console.log("ERROR LOADING SQL:",error);})
但是,由于某种原因,输出是:Table Data: undefined
我不确定为什么会这样。我返回的数据是否正确?
【问题讨论】:
-
您是否检查过
recordset不是undefined? -
不,它不是
undefined。我可以将记录集的内容写入 console.log -
看起来
return html是应该在resolveing 之前运行的行,并且无论html是什么都应该是data参数。但是如果你能够html = html.replace('</table>', '');而不抛出错误,那么应该定义html。您是否尝试记录这些行以查看它们是否按预期运行和填充? -
尝试在
req.query()完成后关闭连接。 -
我已经把所有
external函数(conn.*req.*tableify)都搞砸了,你发布的代码没有出现问题 - @987654339 的内容是什么@ 紧跟在var html = tableify(recordset);之后
标签: javascript sql-server node.js npm promise