给ExpressJS添加一个例外app.use()
问题描述:
我正在使用NodeJS项目,并使用Express作为我的路由框架。给ExpressJS添加一个例外app.use()
我在我的网站上有一个注册表格和一个登录表单,它们分别向/users
(分别为/register
和/login
)发送请求。不过,我希望能够将/users/:userID
作为路由来查看不同用户的配置文件,但当然,这种路由意味着我为每个登录用户都有一个session_id。
我的问题是,我怎样才能使用app.use('/users', checkForSessionId)
,而不用它来注册和登录?
答
这就是你需要使用中间件
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
它取决于您的资源层次结构。您还可以使用中间件获取整个资源,而不是为每条路径添加中间件。 –
我认为做一个很好的方式把您的'checkForSessionId'函数插入中间件,'/ users /'路由器包含'/ login','/ signup','/:userId'路由。这样,您只能将checkForSessionId中间件放在您想要的路由上,同时将它们分开。 [中间件](https://expressjs.com/en/guide/using-middleware.html) –