在node.js express中执行特定的SP时如何定义连接超时

时间:2019-06-04 14:23:40

标签: node.js express connection-timeout

我在node.js中使用快速固件来连接到SQL Server并执行SP。 我有一个SP,它执行的时间比快速默认配置中定义的时间还要长。我收到错误消息:“超时:请求未能在15000毫秒内完成”。 我想在执行此SP时为该SP定义一个较长的超时,该怎么做? 这是我的代码:

const express = require('express');
const router = express.Router();
const config = require('../../config');
const sql = require('mssql');
const db = require('../../modules/db')({
connectionString: config.connectionString
}); 


const GetData = (params) => {
return new Promise((resolve, reject) => { 
    db.connect().then((pool) => {
        return pool.request()
            .input(<input param for the SP>), 
            .execute(<SP name>);
    }).then((data) => {
        resolve(data);
    }).catch((error) => {
        reject(error);
    }).then(() => { })
 });
};

router.use("<path>", <middleware function>, (req, res, next) => {
return GetData(req.body).then((dataResult) => {
    res.status(200).json(dataResult);
}).catch((err) => {
    next({
        details: err
    })
 );
});

1 个答案:

答案 0 :(得分:0)

在我的情况下,我找到了一种在数据库连接的配置中设置它的方法(requestTimeout),并且在执行查询后失败\失败-从配置中删除该属性-这样,默认值将再次处于活动状态。查看我的代码:

const GetData = (params) => {
return new Promise((resolve, reject) => { 
  db.options.connectionString.requestTimeout = <dedicated value>;
  db.connect().then((pool) => {
      return pool.request()
          .input(<input param for the SP>), 
          .execute(<SP name>);
   }).then((data) => {
      resolve(data);
      delete db.options.connectionString.requestTimeout;
   }).catch((error) => {
     reject(error);
  }).then(() => { delete db.options.connectionString.requestTimeout; })
 });
};