Express 中 app.use() 和 router.use() 的区别

新手上路,请多包涵

我只是在阅读有关 express 的文档并发现这两个术语, app.use();router.use();

我知道 app.use(); 在 node 中用于在路径上 挂载中间件,我们经常在大多数 node 应用程序中使用它。但什么是 router.use(); 它们都一样吗?如果不是,有什么区别?

在这里 阅读了有关路由器的信息。我还在 SO 上发现了类似的问题 “express.Router”和使用“app.get”的路由有什么区别?app.all(’*’) 和 app.use(‘/’) 之间的区别,但它们并没有真正回答我的问题。谢谢。

原文由 Naeem Shaikh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

router.get 仅用于定义子路径。考虑这个例子:

 var router = express.Router();

app.use('/first', router); // Mount the router as middleware at path /first

router.get('/sud', smaller);

router.get('/user', bigger);

  • 如果您打开 /first/sud ,则会调用 smaller 函数。
  • 如果您打开 /first/user ,则会调用 bigger 函数。

简而言之, app.use('/first', router) 将中间件安装在路径 /first ,然后 router.get 相应地设置子路径。


但是,如果我们改为使用以下内容:

 app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);

  • 如果您在浏览器中打开 /firstfun 将被调用,
  • 对于 /sudbigger 将被调用
  • 对于 /usersmaller 将被调用

但请记住,对于 /first/sud ,不会调用任何函数。

此链接也可能有帮助: http ://expressjs.com/api.html#router

原文由 Sudhanshu Gaur 发布,翻译遵循 CC BY-SA 4.0 许可协议

router.use(); 为特定路由器服务的路由安装中间件, app.use(); 为应用程序的所有路由安装中间件(或者那些与指定路由匹配的路由,如果你使用 app.use('/ANYROUTESHERE', yourMiddleware()); ).

示例用例可以是一个应用程序,其中一个路由器具有标准路由,另一个路由器处理 api 路由,这需要一个有效用户。

然后,您将仅使用 router.use(yourAuthMiddleware()); 为 api 路由器安装身份验证中间件。

如果您有一个应用程序,但它需要所有路由的有效用户,请使用 app.use(yourAuthMiddleware());

原文由 Laura 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题