node.js - 如何解决此错误:Route.get() 需要回调函数但得到 [object Undefined]
问题描述
我定义了这个函数:
// /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]
但我不明白错误在哪里,我在这里读过一些类似的问题,但我不知道问题出在哪里。
谢谢。
奥斯卡
解决方案
您直接isAuth
在authMiddleware
模块中导出函数,这就是为什么在index.js
模块中authMiddleware
引用函数本身并且isAuth
显然不存在于函数中。
为了解决此问题,请将您的路由器更改为以下内容:
router.get('/exito', authMiddleware, (req, res) => {
return res.status(200).send({token: req.user})
});
推荐阅读
- node.js - AWS Lambda (Node.js, v. 8.10) & Mongoose: MongoNetworkError connection to DB timed out
- google-apps-script - 以编程方式检索上传到 Google 表单的文件
- javascript - 如何从数组中获取匹配元素?
- python - Python naming convention for setter method name without args
- python - pandas.isin 全部大写都坏了?
- c# - 如何在 Windows 事件查看器中留下有用的信息
- apache - apache 只允许通过 IP 访问 localhost 返回错误 301
- java - 如何在 Java 中将预定义值添加到 Pair Hashmap
- python - django double left join + django rest 框架序列化器
- java - 哈希映射
或带有交易的列表(日期作为字段)?