我正在使用一个验证令牌的中间件,但是probolem不是片段,当我实例化该函数时问题就出现了。
有我的代码:
router.use(authRequirer(req, res, next));
当然,这是路由文件:
let router = express.Router();
// Middleware
import authRequirer from '../util/authRequirer';
// Controllers
import AuthCtrl from '../controllers/authCtrl';
import UserCtrl from '../controllers/userCtrl';
let authCtrl = new AuthCtrl();
let userCtrl = new UserCtrl();
router.get('/', (req, res) => {
res.json({ message: "Hey, im working" });
});
// Login, Register, setup admin
router.get('/setup' , authCtrl.setup);
router.post('/register', authCtrl.register);
router.post('/login' , authCtrl.login);
// Autenticacion requerida
router.use(authRequirer(req, res, next));
router.route('/users')
.get(userCtrl.getAll)
.post(userCtrl.create);
router.route('/users/:username')
.get(userCtrl.getOne)
.put(userCtrl.edit)
.delete(userCtrl.delete);
export default router;
我认为我没有做任何正常的事情,但是当我运行代码时,它会抛出以下痕迹:
/home/nano/Dev/omgfriki-api/app/routes/apiroutes.js:44
router.use((0, _utilAuthRequirer2['default'])(req, res, next));
^
ReferenceError: req is not defined
为什么没有定义req?据我所知,它是在你调用路由器时定义的。
无论如何,我正在使用带有require钩子的Babel来编译东西,但90%认为这不是问题。
答案 0 :(得分:4)
而不是使用authRequirer
,req
和res
等尚不存在的变量来调用next
函数:
router.use(authRequirer(req, res, next));
您应该只传递函数:
router.use(authRequirer);
因为use
方法是要通过authRequirer
,req
和res
参数调用next
函数的方法。< / p>