NodeJS MSSQL驱动程序无法使用Pools读取未定义的属性`.then`

时间:2017-09-05 16:57:26

标签: sql-server node.js express

使用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; } }); },

,我应该如何访问res对象?

1 个答案:

答案 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);
         }
});

当然,这实际上并没有处理错误,但这是一个很好的起点。