使用中间件传递错误不起作用 socket.io 但它在通用服务器中确实有效

passing error with socket.io middleware doesnt work but it does work in the general server

提问人:yuval t 提问时间:9/19/2023 更新时间:9/19/2023 访问量:22

问:

在我的服务器中,我得到了我的 Custon 错误处理程序,每次我通过他(使用 next(error))时,他都会接受错误,但是当我使用 socket.io 并尝试向他传递错误时,它不起作用,我不知道为什么,你能解决吗?

io.use((socket, next) => {
const authorizationHeader = socket.handshake.headers?.authorization;
if (!authorizationHeader) {
  next(new CustomError(401, NOT_AUTHORIZED_MESSAGE));
  return;
}
const token = authorizationHeader.split(' ')[1];
const isVerfied = !!decodeLoginCookieToken(token);
if (isVerfied) {
  next();
} else {
  next(new CustomError(401, NOT_AUTHORIZED_MESSAGE));
}

});

node.js 快速 错误处理 socket.io

评论

0赞 Ramu Narasinga 9/19/2023
官方文档建议如下: io.use((socket, next) => { if (isValid(socket.request)) { next(); else { next(new Error(“invalid”));不过,如果可以的话,我会有兴趣查看 CustomError 中的代码。而不是 CustomError,尝试查看它是否与 Error() 一起使用
0赞 yuval t 9/20/2023
class CustomError extends Error { status: number; message: string; constructor(status: number = 500, message: string = 'internal server error') { super(message); this.status = status; this.message = message; } } export default CustomError;
0赞 yuval t 9/20/2023
export const errorHandler = ( error: CustomError, request: Request, response: Response, next: NextFunction ) => { const status = error.status ?? 500; const message = error.message ?? 'Internal server error'; return response.status(status).json({ message, }); }; export default errorHandler;
0赞 Ramu Narasinga 9/20/2023
对不起,不明白。您能否尝试使用新的错误而不是CustomError,看看它是否有效

答: 暂无答案