NodeJS SQL Server 数据拉取不会等待承诺完成



我正在使用Node重写一个ASPX应用程序。这个应用程序的一部分是从SQL Server中的表中提取数据。我正在使用异步函数来尝试并强制在继续之前拉出数据。在进行下一步之前,我必须掌握这些数据。但是,当它从await返回时,响应是空的。

const getUserGroups = async (user) => {
let qry = `Select role from [xxxxx] where LOWER(yyyyy)='${user.toLowerCase()}'`;
let groups = await dataQuery.Select(qry, dbList.MCAIntranet)
console.log("Groups: ", groups); //This is undefined
return groups;
// })
}

下面是选择函数:

const Select = async (query, database) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) console.log(err);
let request = new sql.Request();
request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
return null
}
return recordset;
})
});
}

我正在使用mssql模块,但由于我是相当新的节点,我不确定我的错误在哪里。

提前感谢你看这个。

在当前代码中,您不从Select函数返回任何内容。特别是你没有包装你的sql代码在承诺。

你说,你正在使用mssql包。它已经支持async/await,所以你应该使用合适的async调用而不是回调。

const Select = async (query, database) => {
try {
await sql.connect(config[database]);
let request =  new sql.Request();
let recordset = await request.query(query);
return recordset;
} catch (e) {
console.log(e);
return null;
}
}

此外,你应该阅读参数化查询,因为目前你的代码是相当不安全的,即它很容易受到SQL注入和无效语法错误。

您可以使用Promise对象或return Promise.resolve(data);return Promise.reject(err)包装您的实现:

const Select = async (query, database) => {
return new Promise((resolve, reject) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) reject(err);
let request = new sql.Request();

request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
reject(err);
}
resolve(recordset);
})
});
});
}

最新更新