在我的node / express app.js主文件中,我创建了一个微型应用路由器:
var router = express.Router();
我将内部传递给控制器功能并再次导出,最后,我在
中注册了路由器app.use('/Link', router);
我现在想用附加的Controller功能设置第二个Controller文件夹,并且只为我的Angular NGX-Charts路由,在这里我以正确的格式从mongoDB准备数据。因此,我想创建第二个路由器对象,并在其中传递和注册该路由器对象的正确路由和中间件。
我现在的问题是,我可以为我的快速实例创建并注册多个路由器对象,例如app.use('/Link',router1, router2, router3,...)
吗?
然后它的行为是否像一个路由器对象一样(我的意思是,它会根据我在浏览器中导航到的路由并执行正确的中间件来找到合适的路由器)吗?
答案 0 :(得分:1)
当然可以。常见的用例是密码保护,生成身份验证令牌,解析有效负载等。
app.use
在第一个参数之后接受任意数量的“中间件”。
查看文档以了解更多详细信息:https://expressjs.com/en/4x/api.html#app.use
参数相当灵活,可以传递的选项有很多。
每个函数都有3个参数,分别是Request,Response和next回调函数。这是一个带有嵌入式中间件的示例,该中间件记录了一些内容并转发到下一个处理程序。
app.use('/secret-stuff', authorize, (req, res, next) => {
console.log('token from auth middleware', req.authToken)
next()
}, render)
要注意的一件事是,您只能发送一个响应,因此只有最终处理程序会将响应发送给用户。之前的所有操作都应调用next()
来激活链中的下一个中间件。
只要您确保在路径不匹配时转发(呼叫next()
),就可以通过许多路由器。您将需要使用某种路径模式,以允许中间件路由器处理路径中的更高特异性(例如'/ Link / *'),否则您将无法在路径中定义任何子路径处理程序。中间件路由器。
过去,我不需要子路由器。中间件可以很好地用于模块化。