Создать объект контекста
Как и в вашем примере, мы добавляем другое промежуточное ПО, которое создает контекст для конвейера промежуточного ПО:
const initCtx = (req,res,next) => {
req.ctx = {};
next();
}
Затем в объявлении промежуточного ПО:
app.get("/something", [initCtx, isTokenValid], (req, res) => {
Обычно это можно сделать как первое промежуточное ПО в конвейере, в верхней части ваших объявлений промежуточного ПО во всем приложении:
const initCtx = (req,res,next) => {
req.ctx = {};
next();
}
app.use(initCtx);
Передача значения в ctx
В isTokenValid
промежуточном ПОгде вы извлекаете accessToken
и время его истечения, в конце вы можете пройти его.Если срок действия маркера доступа равен tokenExpiration
:
req.ctx.tokenExpiration = tokenExpiration;
Использование значения
В промежуточном программном обеспечении, которое заботится об обновлении токенов:
app.get("/something", [initCtx, isTokenValid], (req, res) => {
const tokenExpiration = req.ctx.tokenExpiration; // you have token expiration time that you can compare and apply required logic in refreshing token middleware
Оригинальный ответ и объяснение
Вы можете назначить свойство ctx
(объект контекста) для выражения req
объекта и передавать через него информацию между промежуточными программами.Затем вы сможете проверить определенные ключи в этом объекте в промежуточном ПО нижестоящего уровня и применить необходимую логику.
ctx
объект может быть создан первыми промежуточными программами в конвейере (этот часто также проверяет requestId
из заголовков и присваивает его также ctx
, так что все действия в контексте одного и того же запроса могут бытьлегко отслеживается)
Если токен действителен, вы можете назначить req.ctx.tokenExpiration
, а затем в другом промежуточном программном обеспечении проверить, нужно ли его обновлять.
Кстати, фреймворки Koa и Loopback работают с объектом ctx из коробки.