node.js - 更改节点快速超时尝试连接
问题描述
我正在尝试使用 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 秒后的常见消息。
解决方案
推荐阅读
- amazon-web-services - 在 AmazonWS 中存储键-布尔值对
- sql - 在这种情况下如何截断日志
- java - 怎么不打开 JFrame More 一次呢?
- xcode10.1 - 无法打开文件“Demo”,因为您无权查看它
- javascript - 一种计算响应式网格中列的方法
- javascript - 当我使用链接跳转到我的书签 ID 时,通过 Javascript 函数委托什么事件?
- elasticsearch - 弹性搜索多条件查询
- php - cURL 错误 77:错误设置证书验证位置:CAfile
- ios - 显示键盘会导致包含活动文本字段的单元格行隐藏在其部分页脚下
- angularjs - 使用 Angularjs 后 Adsense 停止显示广告