当前位置: 首页 > 后端技术 > Node.js

expressrouter也是一个中间件最基本的路由

时间:2023-04-03 16:06:24 Node.js

,app.get('/foo',...)app.get('/foo',function(req,res,next){if(Math.randon()<0.5)returnnext();res.send('sonetznesthis');});app.get('/too',function(req,res){res.send('andsometimesthat');});上面是一个复杂的路由,其实是一种特殊的中间件,向下会有一个next方法传入。在此示例中,同一路由有两个处理程序。通常第一个会赢,但是第一个会在大约一半的时间内通过,将机会留给第二个处理器。我们甚至不需要使用app.get两次:在一个app.get中可以使用任意数量的处理程序。在以下示例中,三种不同的响应出现的频率相同:app.get('/too',function(req,res,next){if(Math.random()<0.33)returnnext();res.send('red');},function(req,res,next){if(Math.random()<0.5)returnnext();res.send('green');},function(req,res){res.send('蓝色');});虽然乍一看它可能不是特别实用,但这使您可以创建可在任何路由中使用的通用函数。例如,我们有一种机制可以在某些页面上显示特价商品。特别优惠经常更改,可能不会出现在每个页面上。我们可以创建一个函数来将特价商品注入res.locals属性:functionspecials(req,res,next){res.locals.specials=getSpecialsFromDatabase;下一个();}app.get('/page-with-specials',specials,function(req,res){res.render('page-with-specials');});我们也可以通过这种方式来实现授权机制。比如我们的用户授权代码会设置一个session变量req.session.authorized,那么我们可以做一个可复用的授权过滤器如下:functionauthorize(req,res,next){if(req.session.authorized)returnnext();res.render('未授权');}app.get('/secret',authorize,functton(){res.render('secret');});app.get('/sub-rosa',authorize,functton(){res.render('亚罗莎');});