使用NodeJS中的MSSQL驱动程序并尝试使用池来保持与数据库的连接干净,并避免出现连接未正确关闭的问题。现在我正在从标准调用转向池,我一直遇到一个奇怪的错误。
我在Express路线上的代码如下:
@Echo Off
Set "TS=.ToString('yyy-MM-dd') + \" 00:00 AM\""
For /F "UseBackTokens=1*Delims=@" %%A In (`
PowerShell "(Get-Date)%TS% + \"@\" + (Get-Date).AddDays(-1)%TS%"`
) Do Set "TD=%%A" & Set "YD=%%B"
Echo %%TD%% = %TD%
Echo %%YD%% = %YD%
Timeout -1
这对于使用与DB的标准连接很好,如下所示:
app.get('/records/pending/:id', (req, res) => {
try{
dbq.getOnePending(req.params.id).then((set) => {
res.send(set);
});
}catch(err) {
console.error(err);
res.send(err);
}
});
现在,我已转移到连接池模型,我无法在快速代码中使用dbq.getOnePending = (id) => {
return mssql.connect(sqlConfig).then(() => {
return new mssql.Request().query(` <<query>> `)
.then((set) => {
mssql.close();
return set;
}).catch((err) => {
console.error(err);
mssql.close();
});
});
}
。因为我收到这个错误:
TypeError:无法读取未定义的属性'then'
查询的池版本如下所示:
.then()
如果我无法使用 getOnePending: (id) => {
sweepPool.request().query(`<<query>> `, (err, res) => {
if(err){
console.error(err);
return err;
}else{
return res;
}
});
},
?
答案 0 :(得分:0)
我没有使用标准接口进入连接池,而是使用了流畅的界面来允许.then()
和.catch()
。
连接池请求函数的标准形式如下所示:
ConnectionPool.request().query(<<query>>, callback(error, response));
为了允许我想要使用与标准连接类似的代码启动和运行的用例,我使用下面的函数作为起点。
示例查询功能
getAllPending = () => {
return sweepPool.request().query(`<<query>>`).then((set) => {
console.log(set);
return set;
}).catch((err) => {
console.error(err);
return err;
});
}
调用查询函数
app.get('/records/pending', (req, res) => {
try{
dbq.getAllPending().then((set) => {
res.send(set);
});
}catch(err){
console.error(err);
res.send(err);
}
});
当然,这实际上并没有处理错误,但这是一个很好的起点。