处理路线时,我想检查路线是否有效。如果没有,我总是希望重定向到notFound
页。
如果用户未获得授权,我总是希望重定向到login
页。
否则我想使用有效路线。
在我的app.js
中,我需要router.js
并将应用作为参数传递
require('./server/router')(app);
所以我的路由器在
时工作正常module.exports = function(app){
app.use('/route1', require('./routes/route1'));
app.use('/route2', require('./routes/route2'));
app.use('/route3', require('./routes/route3'));
};
在那里。使用此结构时
module.exports = function(){
var router = require('express').Router();
router.use('/route1', require('./routes/route1'));
};
导致
Cannot GET /route1
我的所有路线都包含此基础结构
var router = require('express').Router();
// -- Route --
router.get('/', function (req, res) { // Render the HTML here
res.render('route1', {
});
});
// -- Ajax POST --
router.post('/doSomething', function (req, res) { // Load some data
res.send({});
});
module.exports = router;
在需要路线时是否无法使用路由器?
此外,我想对无效路由或授权用户进行检查。
app.use(function(req, res, next) {
if(!req.route){
res.redirect('/notFound'); // invalid route
} else {
var session = req.session;
if (session.user == null){ // unauthorized user
res.redirect('/login');
} else {
// valid routes here
}
}
});
如何将此伪代码与有效路由连接?
答案 0 :(得分:1)
放在快递app.js
的末尾// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
if(err.status == 404) res.redirect('/notFound')
// can handle more conditions (like 500) also
})
答案 1 :(得分:1)
您必须创建一个中间件来检查所有路由之上的授权用户,另一个用于在最后处理未找到的路由:
处理未经授权的用户:
app.use(function(req, res, next) {
if (!req.session.user) {
return res.redirect('/login');
}
next();
});
找不到路线:
app.use(function(req, res, next) {
res.status(404).send('Page Not Found');
});
您可能希望使用res.render('error', {code: 404, msg: 'Page Not Found'});