<legend id='bBg3N'><style id='bBg3N'><dir id='bBg3N'><q id='bBg3N'></q></dir></style></legend>
    • <bdo id='bBg3N'></bdo><ul id='bBg3N'></ul>
    <tfoot id='bBg3N'></tfoot>

    <small id='bBg3N'></small><noframes id='bBg3N'>

    <i id='bBg3N'><tr id='bBg3N'><dt id='bBg3N'><q id='bBg3N'><span id='bBg3N'><b id='bBg3N'><form id='bBg3N'><ins id='bBg3N'></ins><ul id='bBg3N'></ul><sub id='bBg3N'></sub></form><legend id='bBg3N'></legend><bdo id='bBg3N'><pre id='bBg3N'><center id='bBg3N'></center></pre></bdo></b><th id='bBg3N'></th></span></q></dt></tr></i><div id='bBg3N'><tfoot id='bBg3N'></tfoot><dl id='bBg3N'><fieldset id='bBg3N'></fieldset></dl></div>

      1. 从快速中间件中排除路由

        时间:2024-04-20

        <legend id='0FGKa'><style id='0FGKa'><dir id='0FGKa'><q id='0FGKa'></q></dir></style></legend>
        1. <small id='0FGKa'></small><noframes id='0FGKa'>

        2. <i id='0FGKa'><tr id='0FGKa'><dt id='0FGKa'><q id='0FGKa'><span id='0FGKa'><b id='0FGKa'><form id='0FGKa'><ins id='0FGKa'></ins><ul id='0FGKa'></ul><sub id='0FGKa'></sub></form><legend id='0FGKa'></legend><bdo id='0FGKa'><pre id='0FGKa'><center id='0FGKa'></center></pre></bdo></b><th id='0FGKa'></th></span></q></dt></tr></i><div id='0FGKa'><tfoot id='0FGKa'></tfoot><dl id='0FGKa'><fieldset id='0FGKa'></fieldset></dl></div>
          • <bdo id='0FGKa'></bdo><ul id='0FGKa'></ul>

                <tfoot id='0FGKa'></tfoot>
                    <tbody id='0FGKa'></tbody>
                  本文介绍了从快速中间件中排除路由的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个节点应用程序,就像防火墙/调度程序一样位于其他微服务前面,它使用如下中间件链:

                  I have a node app sitting like a firewall/dispatcher in front of other micro services and it uses a middleware chain like below:

                  ...
                  app.use app_lookup
                  app.use timestamp_validator
                  app.use request_body
                  app.use checksum_validator
                  app.use rateLimiter
                  app.use whitelist
                  app.use proxy
                  ...
                  

                  但是对于特定的 GET 路由,我想跳过除 rateLimiter 和代理之外的所有路由.他们是一种使用 :except/:only 设置像 Rails before_filter 这样的过滤器的方法吗?

                  However for a particular GET route I want to skip all of them except rateLimiter and proxy. Is their a way to set a filter like a Rails before_filter using :except/:only?

                  推荐答案

                  虽然expressjs没有内置中间件过滤系统,但至少可以通过两种方式实现.

                  Even though there is no build-in middleware filter system in expressjs, you can achieve this in at least two ways.

                  第一种方法是挂载所有要跳到正则表达式路径的中间件,而不是包含否定查找:

                  First method is to mount all middlewares that you want to skip to a regular expression path than includes a negative lookup:

                  // Skip all middleware except rateLimiter and proxy when route is /example_route
                  app.use(//((?!example_route).)*/, app_lookup);
                  app.use(//((?!example_route).)*/, timestamp_validator);
                  app.use(//((?!example_route).)*/, request_body);
                  app.use(//((?!example_route).)*/, checksum_validator);
                  app.use(rateLimiter);
                  app.use(//((?!example_route).)*/, whitelist);
                  app.use(proxy);
                  

                  第二种方法,可能更易读、更简洁,是用一个小的辅助函数包装你的中间件:

                  Second method, probably more readable and cleaner one, is to wrap your middleware with a small helper function:

                  var unless = function(path, middleware) {
                      return function(req, res, next) {
                          if (path === req.path) {
                              return next();
                          } else {
                              return middleware(req, res, next);
                          }
                      };
                  };
                  
                  app.use(unless('/example_route', app_lookup));
                  app.use(unless('/example_route', timestamp_validator));
                  app.use(unless('/example_route', request_body));
                  app.use(unless('/example_route', checksum_validator));
                  app.use(rateLimiter);
                  app.use(unless('/example_route', whitelist));
                  app.use(proxy);
                  

                  如果你需要比简单的 path === req.path 更强大的路由匹配,你可以使用 path-to-regexp 模块.

                  If you need more powerfull route matching than simple path === req.path you can use path-to-regexp module that is used internally by Express.

                  UPDATE :- 在 express 4.17 req.path 只返回 '/',所以使用 req.baseUrl :

                  UPDATE :- In express 4.17 req.path returns only '/', so use req.baseUrl :

                  var unless = function(path, middleware) {
                      return function(req, res, next) {
                          if (path === req.baseUrl) {
                              return next();
                          } else {
                              return middleware(req, res, next);
                          }
                      };
                  };
                  

                  这篇关于从快速中间件中排除路由的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:环境检测:node.js 或浏览器 下一篇:在 javascript 中创建一个 ISO 日期对象

                  相关文章

                  <legend id='miLRO'><style id='miLRO'><dir id='miLRO'><q id='miLRO'></q></dir></style></legend>
                    <i id='miLRO'><tr id='miLRO'><dt id='miLRO'><q id='miLRO'><span id='miLRO'><b id='miLRO'><form id='miLRO'><ins id='miLRO'></ins><ul id='miLRO'></ul><sub id='miLRO'></sub></form><legend id='miLRO'></legend><bdo id='miLRO'><pre id='miLRO'><center id='miLRO'></center></pre></bdo></b><th id='miLRO'></th></span></q></dt></tr></i><div id='miLRO'><tfoot id='miLRO'></tfoot><dl id='miLRO'><fieldset id='miLRO'></fieldset></dl></div>

                        <bdo id='miLRO'></bdo><ul id='miLRO'></ul>
                    1. <small id='miLRO'></small><noframes id='miLRO'>

                    2. <tfoot id='miLRO'></tfoot>