MEAN:我可以在 app.use() 中注册多个迷你路由器应用程序吗?

MEAN: can I register more than a mini router app in app.use()?

在我的 node/express app.js 主文件中,我创建了一个迷你应用程序路由器:

var router = express.Router();

我将内部传递到我的控制器函数并再次导出,最后,我在

中注册路由器
app.use('/Link', router);

我现在想为我的 Angular NGX-Charts 设置第二个具有额外控制器功能和路由的控制器文件夹,我在其中以正确的格式准备来自 mongoDB 的数据。因此,我想创建第二个路由器对象,我在其中传递并为该路由器对象注册正确的路由和中间件。

我现在的问题是,我可以为我的 express 实例创建和注册多个路由器对象吗,比如 app.use('/Link',router1, router2, router3,...)? 然后它的行为是否与一个路由器对象相同(我的意思是,它会根据我在浏览器中导航到的路由找到合适的路由器并执行正确的中间件)吗?

当然可以。常见用例是密码保护、生成身份验证令牌、解析有效负载等。

app.use 在第一个参数后接受任意数量的 "middlewares"。

查看文档了解更多详情:https://expressjs.com/en/4x/api.html#app.use

参数相当灵活,您可以通过多种选择。

  • 一个中间件函数。
  • 一系列中间件功能(以逗号分隔)。
  • 一组中间件函数。
  • 以上所有的组合。

每个函数有3个参数,分别是Request、Response和下一个回调函数。这是一个内联中间件的示例,它记录一些内容并转发到下一个处理程序。

app.use('/secret-stuff', authorize, (req, res, next) => {
    console.log('token from auth middleware', req.authToken)
    next()
}, render)

需要注意的是,您只能发送一个响应,因此只有最终处理程序会将响应发送给用户。之前的一切都应该调用 next() 来激活链中的下一个中间件。

只要您确保在路径不匹配时转发(调用next()),您就可以通过多个路由器。您将需要使用某种路径模式,允许中间件路由器处理路径中更大的特异性(例如'/Link/*'),否则您将无法定义任何子-中间件路由器中的路径处理程序。

过去,我没有子路由器的需要。中间件适用于模块化。