【发布时间】:2021-03-30 08:02:33
【问题描述】:
通常在 express 中,任何中间件都可以根据正常的 node-js 回调约定调用 next 并带有可选错误。
但是,当我在 NestMiddleware 中返回错误时,根本不会处理该错误。错误不会被记录或返回,它会被吞下并且请求不会终止。
这里是示例代码:
@Injectable()
export class AuthenticateMiddleware implements NestMiddleware {
async use(req: Request | any, res: Response, next: NextFunction) {
console.log(
chalk.magentaBright.bold('Authenticate Middleware Executing...'),
);
let token: string;
if (
!req.headers.authorization ||
!req.headers.authorization.startsWith('Bearer')
) {
return new UnauthorizedException('Please login to continue');
} else {
token = req.headers.authorization.split(' ')[1];
}
let isValid: { id: string; iat: number; exp: number };
try {
isValid = await jwt.verify(token, process.env.JWT_SECRET);
} catch (e) {
return new UnauthorizedException('Token invalid!');
}
req.userId = isValid.id;
next();
}
}
【问题讨论】: