【问题标题】:How to use query parameters in Nest.js?如何在 Nest.js 中使用查询参数?
【发布时间】:2019-07-24 06:57:32
【问题描述】:

我是 Nest.js 的大一新生。

我的代码如下

  @Get('findByFilter/:params')
  async findByFilter(@Query() query): Promise<Article[]> {

  }

我用postman测试过这个路由器

http://localhost:3000/article/findByFilter/bug?google=1&baidu=2

其实我可以得到查询结果{ google: '1', baidu: '2' }。但我不清楚为什么url有一个字符串'bug'

如果我删除那个词就像

http://localhost:3000/article/findByFilter?google=1&baidu=2

然后邮递员会显示 statusCode 404

其实我不需要bug这个词,如何像http://localhost:3000/article/findByFilter?google=1&amp;baidu=2一样自定义路由器实现我的目的地

还有一个问题是如何让多个路由器指向一个方法?

【问题讨论】:

    标签: javascript node.js typescript express nestjs


    【解决方案1】:

    查询参数

    您必须删除 :params 才能使其按预期工作:

    @Get('findByFilter')
    async findByFilter(@Query() query): Promise<Article[]> {
      // ...
    }
    

    路径参数

    :param 语法用于路径参数并匹配路径上的任何字符串:

    @Get('products/:id')
    getProduct(@Param('id') id) {
    

    匹配路线

    localhost:3000/products/1
    localhost:3000/products/2abc
    // ...
    

    路由通配符

    要将多个端点与同一方法匹配,您可以使用路由通配符:

    @Get('other|te*st')
    

    将匹配

    localhost:3000/other
    localhost:3000/test
    localhost:3000/te123st
    // ...
    

    【讨论】:

    • 很高兴再次见到你。你的解决方案对我有用。顺便说一句,你能给我发一封电子邮件或其他什么吗,你知道我是 Nest 和 typeorm 的大一新生。但有时我不得不面对一些麻烦,我会提出一个关于堆栈溢出的新问题。如果你不介意,我想把链接发给你。
    • 很高兴我能帮上忙! :-) 不用担心,我会经常检查有关nest.js 的所有问题。但请确保使用正确的标签 [nestjs] 而不是 [nest]。
    • 很棒的答案。
    【解决方案2】:

    如果您将参数作为部分或 url:/articles/${articleId}/details,您将使用 @Param

    @Get('/articles/:ARTICLE_ID/details')
    async getDetails(
        @Param('ARTICLE_ID') articleId: string
    )
    

    如果您想提供查询参数/article/findByFilter/bug?google=1&baidu=2,您可以使用

    @Get('/article/findByFilter/bug?')
    async find(
        @Query('google') google: number,
        @Query('baidu') baidu: number,
    )
    

    【讨论】:

    • 优秀。谢谢!
    【解决方案3】:

    我们可以使用@Req()

    @Get(':framework')
    getData(@Req() request: Request): Object {
        return {...request.params, ...request.query};
    }
    

    /nest?version=7

    {
        "framework": "nest",
        "version": "7"
    }
    

    read more

    【讨论】:

    • 我不得不把这段代码... import { Request } from 'express'; ...在脚本之上让这个工作!
    • @JonathanMartins 随意编辑我的答案
    【解决方案4】:

    您可以使用 @Req 装饰器,并使用 param 对象,请参阅:

    @Get()
      findAll(
        @Req() req: Request
      ): Promise<any[]> {
        console.log(req.query);
        // another code ....
      }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2016-06-17
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2020-04-24
    相关资源
    最近更新 更多