【问题标题】:How to solve this error: Route.get() requires a callback function but got a [object Undefined]如何解决此错误:Route.get() 需要回调函数但得到 [object Undefined]
【发布时间】:2020-10-07 16:15:04
【问题描述】:

我已经定义了这个函数:

// /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]

但我不明白错误在哪里,我在这里阅读了一些类似的问题,但我不知道问题在哪里。

谢谢。

奥斯卡

【问题讨论】:

    标签: node.js jwt passport.js angular-social-login


    【解决方案1】:

    您在authMiddleware 模块中直接导出函数isAuth,这就是为什么在index.js 模块中authMiddleware 指的是函数本身,而isAuth 显然不存在于函数中。

    要解决此问题,请将您的路由器更改为以下内容:

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

    【讨论】:

    • 乐于助人!不要忘记接受答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多