首页 > 解决方案 > 更改节点快速超时尝试连接

问题描述

我正在尝试使用 node-expose-sspi 进行身份验证来更改 post express 方法的超时。问题是,到目前为止,我尝试过的都没有奏效。我的目标是将连接超时设置为 5 秒,而不是标准的 120 秒。

当我输入正确的凭据时,代码大约需要 0.3s 到 1.5s,当凭据错误时,代码需要 7s 到 120s

“实际”代码是:

const app = express();

app.post('myRoute', async (req, res) => {
   try {
    const domain = sso.getDefaultDomain();
    const credentials: UserCredential = {
        domain,
        user: req.body.login,
        password: req.body.password,
    };
    
    const ssoObject = await sso.connect(credentials);
    if (ssoObject) {
        req.session.sso = ssoObject;
        return res.json({
            sso: req.session.sso,
        });
    }
} catch (err) {
    return res.status(401).json({
        error: 'bad login/password.',
    });
}
});

到目前为止我尝试过的是:

全局更改 setTimeout:

var server = app.listen();
server.setTimeout(5000);

更改方法内部的 res:

 res.setTimeout(5000, () => {
  console.log('Request has timed out.');
  res.send(408);
});

和承诺竞赛:

let promisseConnect = new Promise(async (resolve, reject) => {
  try {
    const domain = sso.getDefaultDomain();
    
    const credentials: UserCredential = {
      domain,
      user: req.body.login,
      password: req.body.password,
    };
    
    const ssoObject = await sso.connect(credentials);
    
    if(ssoObject){
      resolve(ssoObject);
    }else{
      reject(401);
    }
  } catch (error) {
    reject(401);
  }
})

let promisseTimer = new Promise((resolve, reject) => {
  let wait = setTimeout(() => {
    clearTimeout(wait);
    resolve(408)
  }, 1000)
})

Promise.race([
  promisseConnect,
  promisseTimer,
])
.then((res) => console.log(res))
.catch((res) => console.log(res))

据我记得,所有这些都没有显示任何错误消息,只是尝试连接 120 秒后的常见消息。

标签: node.jsexpresssettimeoutasync.jsconnection-timeout

解决方案


推荐阅读