javascript - node.js中的路由堆叠

标签 javascript node.js express

var express = require('express');
var router = express.Router();
router.use(function(req, res, next){
    console.log(req.user)
    if(!req.user){
        res.redirect('/login');
     }else{
        res.locals.username = req.user.username;
        return next();
     }
});

//this won't work
router.get('/register', function(req, res, next) {
  res.render('register');
});

第一个 block 很有意义并且正在运行,我能够拥有一个带有 protected 路由的登录系统。但同时它破坏了我的第二位,它会显示登录页面,尽管我尝试导航到 localhost:3000/register。

最佳答案

当您使用 router.use() 时,您是在告诉路由器在接下来的所有 roter.get() 路由中使用该函数中间件。所以在这里,顺序是有道理的。如果你关心秩序,你可以做@bloodyKnuckles 做的事。或者,如果您想为您的路线保留该模式,您可以执行以下操作:

// Routes that don't need authorization like register
router.get('home',...);
router.get('register',...);

// Use your authorization middleware
router.use(function(req, res, next){
  console.log(req.user)
  if(!req.user){
    res.redirect('/login');
  }else {
    res.locals.username = req.user.username;
    return next();
  }
});

// At this point you're using the authorization middleware. 
// Any routes declared from here will call authorization middleware before its handler.
router.get('profile', ...);

关于javascript - node.js中的路由堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641986/

相关文章:

javascript - 如何在对象的给定键处循环遍历数组?

javascript - 如何检测html文件中的所有mso书签?

javascript - C# MVC 获取完整文件路径

reactjs - React Express PM2 部署

node.js - 如何检查nodejs中的标题?

javascript - 窗口大小调整时如何取消绑定(bind)/关闭 jQuery 事件

javascript - 如何安装所有 npm 依赖项的特定版本/标签

javascript - 使用 Math.random() 生成均匀分布

javascript - Express.js : Does calling next(error) from a route handler call a global error handling middleware?

node.js - 需要 Express 应用程序中的子模块