在Node.js中使用回调调用函数

时间:2020-02-28 14:04:24

标签: node.js

我坚持使用此代码。 我需要先检查令牌是否正常,然后再执行“ api”路由。 我的问题是我的回叫行

checkTokenAlive(token, function (err) {

再也不会回来。

我在做什么错了?

const express = require('express')
const app = express()
const server = require('http').Server(app)
....
checkTokenAlive = (decoded, cb) => {
    const now = Date.now().valueOf() / 1000
    if (typeof decoded.exp !== 'undefined' && decoded.exp < now) {
        cb(`token expired: ${JSON.stringify(decoded)}`)
    }
    if (typeof decoded.nbf !== 'undefined' && decoded.nbf > now) {
        cb(`token not yet valid: ${JSON.stringify(decoded)}`)
    }
}
checkTokenAuthenticated = (req, res, next) => {
    let token = req.body.token;
    checkTokenAlive(token, function (err) {

       console.log('I am here');  //problem - never called
       if (err) {
            console.log(err)
            return res.status(400).end(err)
        }
        return next()
    });
}

app.post('/api', checkTokenAuthenticated, async (req, res) => {
    ....
})

1 个答案:

答案 0 :(得分:1)

您的逻辑似乎在checkTokenAlive()中存在缺陷,因为在某些情况下(例如令牌有效时)您可能永远都不会调用回调,甚至可以调用两次。我不确切知道所有条件都应该是什么,但这是一个主意:

checkTokenAlive = (decoded, cb) => {
    const now = Date.now().valueOf() / 1000;
    if (!decoded || typeof decoded.exp !== "number" || typeof decoded.nbf !== number") {
        cb(`invalid or missing token`);
    } else if (decoded.exp < now) {
        cb(`token expired: ${JSON.stringify(decoded)}`)
    } else if (decoded.nbf > now) {
        cb(`token not yet valid: ${JSON.stringify(decoded)}`)
    } else {
        // token looks good
        cb();
    }
}