首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NodeJs / Express中路由处理程序中的链路由

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

Stack Overflow用户
提问于 2018-01-09 14:28:33
回答 2查看 3.2K关注 0票数 3

在处理路由时,我想检查路由是否有效。如果没有,我总是想重定向到notFound页面。

如果用户没有被授权,我总是希望重定向到login页面。

否则,我想使用有效的路线。

在我的app.js中,我需要router.js并将应用程序作为参数传递

代码语言:javascript
运行
复制
require('./server/router')(app);

所以当我的路由器

代码语言:javascript
运行
复制
module.exports = function(app){
    app.use('/route1', require('./routes/route1'));
    app.use('/route2', require('./routes/route2'));
    app.use('/route3', require('./routes/route3'));
};

在那里面。使用此结构时

代码语言:javascript
运行
复制
module.exports = function(){
    var router = require('express').Router();
    router.use('/route1', require('./routes/route1'));
};

其结果是

Cannot GET /route1

我的所有路线都包含这个基本结构。

代码语言:javascript
运行
复制
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;

当需要路由时,不可能使用路由器吗?

此外,我希望实现对无效路由或授权用户的检查。

代码语言:javascript
运行
复制
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
    }
  }
});

如何将这个伪代码与我的有效路由连接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-09 14:34:36

把你的特快app.js放在末尾

代码语言:javascript
运行
复制
// 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  
})
票数 2
EN

Stack Overflow用户

发布于 2018-01-09 15:26:59

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

处理未经授权的用户:

代码语言:javascript
运行
复制
app.use(function(req, res, next) {
    if (!req.session.user) {
        return res.redirect('/login');
    }
    next();
});

渔获物未找到的路线:

代码语言:javascript
运行
复制
app.use(function(req, res, next) {
    res.status(404).send('Page Not Found');
});

您可能希望使用res.render('error', {code: 404, msg: 'Page Not Found'});呈现错误视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48170358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档