0

I'm calling a controller to return true or false

Not working controller:

const jwt = require('jsonwebtoken');

class TokenController {
    static async isValidToken(token) {
        try {
            jwt.verify(token, process.env.TOKEN_SECRET);
            return true;
        } catch {
            return false;
        }
    }
}

module.exports = TokenController;

router:

const router = require('express').Router({ mergeParams: true });
const TokenController = require('../../controllers/token');

router.get('/', (req, res) => {
    console.log(TokenController.isValidToken(req.cookies['auth-token']));
}

module.exports = router;

its returning Promise { true } or Promise { false } depending on the controller, but when I receive in the router it returns a promise but it was supposed to return a boolean

Working controller

const ScrumTask = require('../models/ScrumTask');
const User = require('../models/User');

class ScrumController {
    static async getTask(id) {
        console.log(id);
        const taskData = await ScrumTask.findOne(
            { _id: id },
            async (err, data) => {
                if (!err) {
                    return data;
                } else {
                    console.log('error');
                    res.status(400).send(err);
                }
            }
        );
        return taskData;
    }
}

module.exports = ScrumController;

router calling my working controller

const router = require('express').Router({ mergeParams: true });

const translate = require('../../../config/translate.json');

// Import Controllers
const TokenController = require('../../controllers/token');
const ScrumController = require('../../controllers/scrum');

router.get('/view_task/:id', async (req, res) => {
    let id = req.params.id;

    const taskData = await ScrumController.getTask(id);
}

module.exports = router;
Casimiro
  • 25
  • 8

1 Answers1

1

If you use async then you always will get Promise. Moreover I would be better to use Promise.resolve to return synchronous results (your case):

static async isValidToken(token) {
        try {
            jwt.verify(token, process.env.TOKEN_SECRET);
            return Promise.resolve(true);
        } catch {
            return Promise.resolve(false);
        }
    }

OR if all return paths are synchronous then just remove async from a function definition.

Anatoly
  • 20,799
  • 3
  • 28
  • 42