【问题标题】:Add an exception to ExpressJS app.use()向 ExpressJS app.use() 添加一个例外
【发布时间】:2016-12-19 05:52:42
【问题描述】:

我正在开发一个 NodeJS 项目,并使用 Express 作为我的路由框架。

我的站点中有一个注册表单和一个登录表单,它们都向/users(分别为/register/login)发送请求。但是,我希望能够将/users/:userID 作为路由来查看不同用户的个人资料,但是当然,这条路由意味着我对每个登录用户都有一个 session_id。

我的问题是,我怎样才能使用app.use('/users', checkForSessionId),而不应用它来注册和登录?

【问题讨论】:

  • 我认为一个很好的方法是把你的checkForSessionId函数变成中间件,让/users/路由器包含/login/signup/:userId路由。这样,您只能将 checkForSessionId 中间件仅放在您想要的路由上,同时将它们分开。 middleware

标签: javascript node.js express routing server


【解决方案1】:

这就是你需要使用中间件的地方

app.js

var users = require('./routes/user');
app.use('/users', users);

./routes/user.js

var express = require('express');
var router = express.Router();
function checkForSessionId(req, res, next){
    //if no valid session
    //    return res.status(401).json("not authorised");
    //else
    next();
}

router.get('/:userId', checkForSessionId, function(req, res){
    //this is a route which requires authentication
})

router.post('/register', function(req, res){
    //authentication is not necessary
})

module.exports = router;

【讨论】:

  • 好的,这意味着如果我有 20 条路由需要身份验证,我将不得不在每个路由中添加中间件 :( 非常感谢!它解决了我的问题!
  • 这取决于您的资源层次结构。您还可以为整个资源使用中间件,而不是为每个路由添加中间件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2019-02-25
  • 2017-08-12
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多