Как решить эту ошибку: Route.get () требует функции обратного вызова, но получил [объект не определен] - PullRequest
1 голос
/ 17 июня 2020

У меня определена эта функция:

// /middleware/authMiddleware.js 
'use strict'

const jwt = require('jwt-simple');
const moment = require('moment');
require('dotenv').config();


function isAuth(req,res, next) {
    if(!req.headers.authorization) {
        return res.status(403).send({mesagge: 'No tienes autorización'})
    }

    const token = req.headers.authorization.split(" ")[1];
    const payload = jwt.decode(token, process.env.JWT_SECRET_TOKEN);

    if(payload.exp <= moment().unix()) {
        return res.status(401).send({message: 'El token ha expirado'})
    }

    req.user = payload.sub;
    next();
}

module.exports = isAuth

И когда я вызываю ее из /route/index.js

'use strict'

const express = require('express');
const router = express.Router();
const authMiddleware  = require ('../middleware/authMiddleware');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

router.get('/exito', authMiddleware.isAuth,  (req, res) => {
    return res.status(200).send({token: req.user})
});

module.exports = router;

, я получаю сообщение об ошибке

Route.get() requires a callback function but got a [object Undefined]

Но я не понимаю, в чем ошибка, я читал здесь аналогичный вопрос, но не знаю, в чем проблема.

Спасибо.

Оскар

1 Ответ

1 голос
/ 17 июня 2020

Вы напрямую экспортируете функцию isAuth в свой authMiddleware модуль, поэтому в вашем index.js модуле authMiddleware относится к самой функции, а isAuth явно не существует в функции.

Чтобы это исправить, измените свой маршрутизатор на следующее:

router.get('/exito', authMiddleware,  (req, res) => {
    return res.status(200).send({token: req.user})
});
...