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

Eve*_*Eve 3 javascript node.js express typescript nestjs

我是Nest.js的新生。

我的代码如下

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

  }
Run Code Online (Sandbox Code Playgroud)

我曾经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

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

小智 77

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

@Get('/articles/:ARTICLE_ID/details')
async getDetails(
    @Param('ARTICLE_ID') articleId: string
)
Run Code Online (Sandbox Code Playgroud)

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

@Get('/article/findByFilter/bug?')
async find(
    @Query('google') google: number,
    @Query('baidu') baidu: number,
)
Run Code Online (Sandbox Code Playgroud)


Dmi*_*nko 16

我们可以使用@Req()

import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';

(...)

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

/巢?版本=7

{
    "framework": "nest",
    "version": "7"
}
Run Code Online (Sandbox Code Playgroud)

阅读更多

  • 我必须输入这段代码... import { Request } from 'express'; ...在脚本之上才能正常工作! (2认同)

Kim*_*ern 12

您必须将其删除:params才能正常工作:

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

:param语法是路径参数和路径上的任何字符串相匹配:

@Get('products/:id')
getProduct(@Param('id') id) {
Run Code Online (Sandbox Code Playgroud)

符合路线

localhost:3000/products/1
localhost:3000/products/2abc
// ...
Run Code Online (Sandbox Code Playgroud)

路由通配符

要将多个端点匹配到相同的方法,可以使用路由通配符:

@Get('other|te*st')
Run Code Online (Sandbox Code Playgroud)

将匹配

localhost:3000/other
localhost:3000/test
localhost:3000/te123st
// ...
Run Code Online (Sandbox Code Playgroud)