如何在Nest.js中使用查询参数?

时间:2019-03-02 11:56:06

标签: javascript node.js typescript express nestjs

我是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&baidu=2那样自定义路由器以实现我的目的地

这是另一个问题,如何使多个路由器指向一种方法?

4 个答案:

答案 0 :(得分:2)

您必须删除: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
// ...

答案 1 :(得分:2)

我们可以使用@Req()

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

/ nest?version = 7

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

read more

答案 2 :(得分:1)

如果您将参数作为部分或网址:/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 :(得分:0)

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

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