NodeJs / Express中路由处理程序中的链路由

时间:2018-01-09 14:28:33

标签: javascript node.js express routing

处理路线时,我想检查路线是否有效。如果没有,我总是希望重定向到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
    }
  }
});

如何将此伪代码与有效路由连接?

2 个答案:

答案 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'});

呈现错误视图