【问题标题】:expressjs optional url parametersexpressjs 可选 url 参数
【发布时间】:2022-01-21 17:34:16
【问题描述】:

我正在尝试基于 expressJS 制作简单的应用程序来返回用户(如 API)。 我有 /users 路由来获取所有用户,这没关系。

app.get('/users', (req: express.Request, res: express.Response)

我需要添加一个可选参数限制不输出所有记录。例如:

app.get('/users?limit=5', (req: express.Request, res: express.Response)

但限制参数应该是可选,所以像 /users/users?limit=5/users/ 这样的 URL limit/5 将起作用。

谢谢。

【问题讨论】:

标签: javascript typescript express url


【解决方案1】:

根本不要修改路由的名称。

app.get('/users', 将匹配带有或不带有查询字符串的 /users

通过req.query访问查询字符串中的数据。

if (typeof req.query.limit !== 'undefined') {
    // a limit has been requested
}

【讨论】:

    【解决方案2】:

    使用app.get('/users?limit=5', (req: express.Request, res: express.Response) 作为路由是一个好方法;调用时可以提供或不提供参数;

    (我不知道如何在 express/node 中执行此操作,但我使用 php laravel 引用它只是为了向您展示逻辑) 因此,在您的控制器中,您设置条件以执行选择的查询;您将准备好的查询存储在变量中;

    $query = Model::myqueryBuilder();
    

    所以设置条件

    if($request->limit){
      $query = $query->limit($request->limit);
    }
    

    如果你有另一个参数,你可以做另一个条件;并在我们所有参数条件的末尾执行查询

    $query->get();
    

    因此您可以有条件地使用一些查询生成器并执行最后准备的所有查询;

    希望这个逻辑对你有帮助

    【讨论】:

      【解决方案3】:

      我认为您需要创建两个端点。
      '/users''/users?limit=5' 的第一个端点

      app.get('/users', (req: express.Request, res: express.Response) => {
          const { limit } = req.query
          console.log(limit)
      })
      

      '/users/limit/5' 的第二个端点

      
      app.get('/users/limit/:limit', (req: express.Request, res: express.Response) => {
          const { limit } = req.params
          console.log(limit)
      })
      

      【讨论】:

        猜你喜欢
        • 2017-05-28
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多