Выполнение обещаний в промежуточном ПО Express - PullRequest
0 голосов
/ 05 ноября 2019

Я использую промежуточное программное обеспечение для небольшого рефакторинга.

Вот процесс: каждый раз, когда приходит запрос, промежуточное программное обеспечение уровня маршрутизатора принимает и проверяет, существует ли JWT и не истек ли, если оно существует исрок действия не истек, прочитайте токен с сервера Redis, в противном случае запросите новый токен и сохраните его в Redis.

У меня есть два вопроса:

  1. Нижеприведенное промежуточное ПО просто обойдено, какя должен это исправить?
  2. Как выполнить асинхронный / ожидающий путь этого промежуточного программного обеспечения?

Промежуточное программное обеспечение:

const oAuthClient = require("../client/oAuthClient")
const redisClient = require("../client/redis")

module.exports = (req, res, next) => {
const cid = req.cid;
console.log(cid);

const existPromise = redisClient.existsAsync(cid)
const hgetPromise = redisClient.hgetAsync(cid, "expiration")
Promise.all([existPromise, hgetPromise]).then((redisReplies) => {

    if (redisReplies[0] && (Number(redisReplies[1]) < new Date().getTime())) {
        redisClient.hgetAsync(cid, "token").then((token) => {
            req.jwt = token
        })
    } else {
        oAuthClient.credentials.getToken().then((oAuthReplies) => {
            const jwtToken = oAuthReplies.accessToken
            const expirationIn = oAuthReplies.data.expires_in
            const p1 = redisClient.hsetAsync(cid, 'token', jwtToken)
            const p2 = redisClient.hsetAsync(cid, 'expiration', new Date().getTime() + Number(expirationIn))
            Promise.all([p1, p2]).then(() => {
                req.jwt = jwtToken
                next()
            })
        })
    }
}).catch((err) => {
    next(err)
})
}

Обработчик маршрута:

router.get("/emailBot/:cid", getParams, getOauthToken, async (req, res, next) => {
const cid = req.cid
const jwtToken = req.jwt

try {
    const apiUrl = process.env.EMAILBOTAPI
    const XToken = process.env.EMAILBOTXTOKEN
    console.log(apiUrl, XToken, jwtToken);

    const apiResponse = await sendMessages.triggerApi(apiUrl, jwtToken, XToken, {
        invocationContext: {
            cid: cid
        }
    })
    console.log(apiResponse);

} catch (error) {

    next(error)
}

res.send({
    message: "success"
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...