在快递中需要一些帮助或任何线索,包括/要求在运行时使用动态路由,这让我感到困惑,但我会尽我所能。
这只是现在应用路线配置的一个示例
app.use('/', require('./routes/public'));
app.use('/u', require('./routes/user'));
app.use('/a', require('./routes/admin'));
例如 require('。/ routes / public')将包含类似的内容
router.get('/', home.index);
router.get('/faq', faq.index)
require('./ routes / user')将包含此
router.get('/dashboard', user_home.index);
router.get('/accounts', user_acc.index)
还 require('。/ routes / admin')
router.get('/dashboard', adm_home.index);
router.get('/accounts', adm_acc.index)
我已经安装了passportjs,因此很容易检查用户是否经过身份验证,如果是,用户包含1个属性类型,例如:1 = user,2 = admin。
req.user.type = 1或2,req.isAuthenticated()...
我需要的是注入依赖于用户类型1或2,在runetime需要('./ routes / user')或require('./ routes / admin'),因为我不想为用户声明无效路由输入用户示例,包括admin或backwards。
现在,所有路线都是可见或有效但我需要检查每个控制器的用户类型,我也不想要'/ a'OR'/ u'路由前缀。 所有路线必须在'/'。
下答案 0 :(得分:0)
请求运行到第一个匹配的路径。您可以渲染页面,抛出错误或调用next
来获取下一个中间件。下面是一些路由器示例。
'use strict'
var express = require ('express');
var app = express();
var publicRouter = express.Router();
publicRouter.get('/', (req, res) => res.send('ROOT'));
publicRouter.get('/account', function (req, res, next) {
if (!is-user)
res.send('Hello guest')
else
next();
});
var userRouter = express.Router();
function isUser (req, res, next) {
// return next() on user logon, and error otherwise
return next();
}
userRouter.use(isUser);
userRouter.get('/dashboard', (req, res) => res.send('/dashboard'));
userRouter.get('/account', (req, res) => res.send('Hello user'));
var adminRouter = express.Router();
function isAdmin (req, res, next) {
// return next() on admin logon, and error otherwise
return next(new Error('Access denied'));
}
adminRouter.get('/manage', (req, res) => res.send('/manage'));
app.use(publicRouter);
app.use(userRouter);
app.use('/admin', isAdmin, adminRouter); // "/admin/manage", not "/manage"
// error handler
app.use(function (err, req, res, next) {
res.send(err.message);
});
app.listen(2000, () => console.log('Listening on port 2000'));
另一种方式是
app.get('/', do-smth);
app.get('/dashboard', isUser, do-smth);
app.get('/manage', isAdmin, do-smth);