给ExpressJS添加一个例外app.use()

问题描述:

我正在使用NodeJS项目,并使用Express作为我的路由框架。给ExpressJS添加一个例外app.use()

我在我的网站上有一个注册表格和一个登录表单,它们分别向/users(分别为/register/login)发送请求。不过,我希望能够将/users/:userID作为路由来查看不同用户的配置文件,但当然,这种路由意味着我为每个登录用户都有一个session_id。

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

+0

我认为做一个很好的方式把您的'checkForSessionId'函数插入中间件,'/ users /'路由器包含'/ login','/ signup','/:userId'路由。这样,您只能将checkForSessionId中间件放在您想要的路由上,同时将它们分开。 [中间件](https://expressjs.com/en/guide/using-middleware.html) –

这就是你需要使用中间件

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; 
+0

好的,这意味着如果我有20条需要认证的路由,我将不得不在其中的所有人中添加中间件:(谢谢很多!它解决了我的问题! –

+0

它取决于您的资源层次结构。您还可以使用中间件获取整个资源,而不是为每条路径添加中间件。 –