我创建了一个requireAuth中间件并将其导入到app.js,在app.js中,我还从routes文件夹导入了所有路由。在每个route.js文件中,我有多个链接路由。当我在其中一个文件中使用auth中间件时,它应该只应用于route.js文件中的那些路由,而不是应用于我的整个应用程序。
这是我的中间件-
const jwt = require('jsonwebtoken');
const { User } = require('../models/users');
const requireAuth = (req, res, next) => {
const token = req.cookies.jwt;
//check json web token exists & is verified
if (token) {
jwt.verify(
token,
'***********',
(err, decodedToken) => {
if (err) {
res.redirect('/login');
} else {
next();
}
}
);
} else {
res.redirect('/login');
}
};
module.exports = requireAuth;
这是我的app.js文件-enter image description here
//Authentication routes
const userAuth = require('./routes/authRoute');
//importing all routes
const homeRoutes = require('./routes/home');
const profile = require('./routes/profile');
const seoRoute = require('./routes/seo');
const semRoutes = require('./routes/sem');
const nptelRoutes = require('./routes/nptel');
app.use('/', userAuth);
app.use('/', homeRoutes);
app.use('/', projectRoute);
app.use('/', profile);
app.use('/', seoRoute);
app.use('/', requireAuth, nptelRoutes);
所以你可以看到,我只将requireAuth中间件应用到最后一条路由上,但它应用到我应用程序中的所有路由上。nptelRoutes内部有多个路由,我希望它能在nptelRoutes内部的所有路由上工作。例如/nptel、/nptel/answer、/nptel/videos
1条答案
按热度按时间xghobddn1#
基于此,
app.use()
方法将指定的中间件函数挂载或放置在指定的路径上。只有当请求路径的基与定义的路径匹配时,才会执行此中间件功能。”由于您对所有路由使用相同的路径,因此中间件将应用于相同路径的所有路由。
您必须区分路由路径以使它们保持分离,如下所示: