【问题标题】:chain routes in a route handler in NodeJs / Express在 NodeJs / Express 的路由处理程序中链接路由
【发布时间】:2018-06-18 14:47:14
【问题描述】:

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

如何将此伪代码与我的有效路线联系起来?

【问题讨论】:

  • 您是否为您的应用使用了通用错误处理程序?
  • 抱歉什么意思?
  • express 如果出现问题会自动抛出错误。通常你会在app.js 中放置一个错误处理程序来生成错误消息和状态。但是,404 错误是不同的情况,需要单独处理。如果你愿意,我可以给你举个例子。
  • 那会很好,是的:)
  • @YouneL 的回答应该有效

标签: javascript node.js express routing


【解决方案1】:

放在你的 express 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  
})

【讨论】:

  • 我在app.js 的末尾和router.js 的末尾添加了这个sn-p,两种方式都不起作用
  • 确保你是否已经使用了 app.use(function(err, req, res, next) { 中间件然后附加条件。同时检查并发布不存在的路由的 res.status 值
  • 抱歉应该是404检查一遍
  • 当使用更新的代码时,服务器会冻结。我测试了两种方式,它立即冻结。
【解决方案2】:

您必须创建一个中间件来检查所有路由上的授权用户,并在最后创建另一个处理未找到的路由:

处理未经授权的用户:

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'}); 呈现错误视图

【讨论】:

  • 使用res.render('error', {code: 404, msg: 'Page Not Found'}); 非常棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多