我目前正在尝试将我的 express 应用程序迁移到 tsoa,我最初使用 express-session 进行身份验证。 我目前正在对兼容性进行一些测试,但我发现当我尝试重新生成标题时似乎存在一些问题。
控制器内的两条路线:
@Get("/refreshauth")
public async test_refresh_auth(
@Request() req: any
): Promise<any> {
await req.session.regenerate(function (err: any) {});
console.log(req.sessionID)
return Promise.resolve({message: 'success'});
}
@Get("/authtest")
public async test_auth(
@Request() req: any
): Promise<any> {
req.session.test = (req.session.test) ? req.session.test + 1 : 1;
console.log(req.sessionID)
console.log(req.session.test);
return Promise.resolve({message: 'success'});
}
如果我只测试 test_refresh_auth 函数就可以正常工作。但是,当我在执行几次 test_auth 后尝试 test_refresh_auth 函数时,出现错误。
[错误] :: 错误:无法找到要触摸的会话
错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头
[0] 在新的 NodeError (node:internal/errors:400:5)
[0] 在 ServerResponse.setHeader(节点:_http_outgoing:663:11)
我知道发生此错误是因为标头已设置并且可能从正文开始,但我不确定是代码的哪一部分导致了此问题。我认为这是因为 express session 和 tsoa 之间存在一些奇怪的交互。如果有人可以在这里告知问题并提供解决方案,那就太好了。提前致谢。