如何在嵌套路由 NodeJS 中仅使用部分功能
How to use only PART of the functionality in nested routes NodeJS
所以我有一个路由器 schoolsRouter
正在处理所有学校特定的功能 { 登录学校、添加新教师等)。我希望应用程序的 admin
能够添加和删除新学校。现在,我使用的模式将所有路由功能封装在一个文件 schools.routes.js
中,其中公开了 School
模型。所以 createSchool
和 deleteSchool
路由在 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();
希望对你有用。
所以我有一个路由器 schoolsRouter
正在处理所有学校特定的功能 { 登录学校、添加新教师等)。我希望应用程序的 admin
能够添加和删除新学校。现在,我使用的模式将所有路由功能封装在一个文件 schools.routes.js
中,其中公开了 School
模型。所以 createSchool
和 deleteSchool
路由在 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();
希望对你有用。