代码之家  ›  专栏  ›  技术社区  ›  Ben

使用查询参数处理路由别名

  •  0
  • Ben  · 技术社区  · 6 年前

    在Express中,有没有更好的方法来执行以下操作?

    问题是重定向会导致单独的请求。所以我想知道是否有更好的方法?

    // List disabled users
    router.get(
        '/disabled', (req,res,next) => {
             res.redirect(`${req.baseUrl}?isEnabled=false`);
        }
    );
    
     // List multiple users
    router.get('/',
       getMultipleUsers // This accepts query params for sorting, filtering, pagination, etc
    )
    

    大体上 /disabled 是的“别名” ?isEnabled=false 。

    在Express中是否有处理此问题的标准方法?

    0 回复  |  直到 6 年前
        1
  •  1
  •   James    6 年前

    您可以在这里操纵请求并利用Express中间件流程,例如:。

    router.get('/disabled', (req, res, next) => {
      req.query.isEnabled = false;
      return next('/');
    });
    

    很遗憾,我上面的最初回答是一个误解。文档中解释了可以通过以下方式跳过(或提前退出)路由 next('route') -我的解释是 route 在本例中,是您想要针对的任何路由URL,例如:。 next('/some-url') ,情况并非如此,通过 'route' 到 next 实际上是一个内部处理的特殊用例 下一个 导致错误,如中所述 docs

    如果将任何内容传递给next()函数(字符串“route”除外),Express会将当前请求视为错误,并将跳过任何剩余的非错误处理路由和中间件函数

    我最初的理解是,只有将错误对象传递给 下一个 这会发生的,显然不是这样

    了解了这一点,考虑订购对于您可能拥有的其他路线很重要,例如:。 /:id ,让请求通过 /disabled 路由到 / 将不再像被抓到的那样工作 /:id 预先在这种情况下,我认为您最好还是按照示例手动设置查询参数,但也要设置URL以匹配所需的路由,例如:。

    router.get('/disabled', (req, res, next) => {
      req.query.isEnabled = false;
      req.url = '/';
      return next();
    });
    
    router.get('/:id', ...);
    
    router.get('/', getMultipleUsers);
    
    推荐文章