如何路由嵌入查询字符串的搜索URL?

时间:2019-05-28 07:24:00

标签: javascript node.js express routing

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

需要身份验证的路由如下所示:

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我通过将其放置在verifyToken函数之前对其进行了修复,并且可以正常工作。如果有的话,我想学习其他方法。谢谢

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

答案 2 :(得分:0)

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

的路由说明

Express Routing

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

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

如果hasParams为false,则next()