【问题标题】:How can one route a search URL which has a query string embedded?如何路由嵌入了查询字符串的搜索 URL?
【发布时间】:2019-05-28 07:24:00
【问题描述】:

我正在开发一个快速应用程序,并且我有两个 GET URL。一个获取数据库中的所有资源,但受权限保护(需要身份验证和管理员访问权限),而另一个基于搜索参数(查询字符串)获取资源。

需要认证的路由如下:

carRouter.get('/car', verifyToken, isAdmin, fetchAllCarAds);

这意味着管理员必须先登录,然后进行检查以确定他是否真的是管理员,然后才能获得访问权限。现在我有另一个不需要像这样的身份验证的 GET 路由 :

carRouter.get('/car?status=unsold', filterUnsoldCars);.

我知道 express 不允许基于查询字符串进行路由,那么如何确保不需要身份验证(查询字符串)的请求可以在没有查询字符串的请求中访问?

【问题讨论】:

    标签: javascript node.js express routing


    【解决方案1】:

    您可以执行以下操作以使其正常工作。

    • 检查isAdmin中间件中是否存在查询字符串
    • 如果存在查询字符串,则跳过已在中间件中实现的验证。
    • 如果查询字符串不存在,则检查任一用户是否为管理员。

    【讨论】:

    • 如果这解决了您的问题,请点赞并标记为正确答案。以便其他人可以利用这一点。
    • @camelCase 请检查这是否有用。
    【解决方案2】:

    我通过将它放在 verifyToken 函数之前修复它并且它工作。如果有的话,我想了解其他方法。谢谢

    carRouter.get('/car', filterUnsoldCars, verifyToken, isAdminDummy, fetchAllCarAds);

    【讨论】:

      【解决方案3】:

      我不认为您正在构建正确的路由,但是您可以使用中间件来检查查询参数并绕过分配的下一个路由。查看下面的 next('route')

      路由说明

      Express Routing

      carRouter.get('/car', hasParams, verifyToken, isAdminDummy, fetchAllCarAds);
      carRouter.get('/car?status=unsold', filterUnsoldCars);
      

      如果 hasParams 为 true,则 next('route')

      如果 hasParams 为 false,则 next()

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 1970-01-01
        • 2021-02-21
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 2020-02-14
        相关资源
        最近更新 更多