如何在嵌套路由 NodeJS 中仅使用部分功能

How to use only PART of the functionality in nested routes NodeJS

所以我有一个路由器 schoolsRouter 正在处理所有学校特定的功能 { 登录学校、添加新教师等)。我希望应用程序的 admin 能够添加和删除新学校。现在,我使用的模式将所有路由功能封装在一个文件 schools.routes.js 中,其中公开了 School 模型。所以 createSchooldeleteSchool 路由在 schools.routes.js 中,但我只需要管理员就可以执行这些操作,使用 merged routes 看起来很容易(在admins.routes.js):

adminsRouter.use('/schools/', schoolsRouter);

但问题是现在管理员可以访问 schools.routes.js 中的所有其他路由,例如 schools/login,这是我不希望发生的事情。那么如何让 adminsRouter 使用 schoolsRotuer 中的创建和删除操作而不能访问所有这些其他功能呢? (请记住,我正在使用 JWT 身份验证)。

您可以在您希望控制的路由中使用中间件。

这是我将命名为 admin-middleware.js

的中间件
module.exports = (req, res, next) => {    
    if (user.admin === true) {
        return next();
    } else {
        return res.status(403).send('Unauthorized')
    }
}

所以,这是您在 schools.routes.js

的路线声明
const adminMiddleware = require('../YOUR_FOLDERS/admin-middleware.js');

schools.delete('/:id', adminMiddleware, (req, res) => {
    return res.send('ok');
});

如果您希望忽略路由,可以在中间件的代码中使用此验证。

if(req.originalUrl.includes('/schools/login'))
    return next();

希望对你有用。