简体   繁体   中英

How to get parameters out of Query in NestJS

I want to be able to get a license plate from my query parameters, but it doesn't seem to work, whatever way I write my code, so I'm getting quite confused why it's not working.

Here's the expected behaviour: when using the following GET request: http://localhost:3978/licenseplate/getleasingcompany?licenseplate=1-WMW-478 I want to extract the licenseplate parameter.

Here's my current code:

@Get('getleasingcompany')
async getLeasingCompany(@Query('licenseplate') licenseplate: string) {
    console.log(licenseplate);
}

This logs licenseplate as undefined when trying in postman.

I also tried variants of this code, such as:

@Get('getleasingcompany')
async getLeasingCompany(@Query() query) {
    console.log(query);
}

This logged query as [Function: getQuery] , which I have no idea how to handle ( query.licenseplate is undefined )

Another option is found in a Stackoverflow explanation here , in which Kim uses path parameters. This did work for me, but isn't behaviour my program can use, unfortunately.

Could anyone explain what I'm doing wrong? Thanks!

EDIT 1: After a few comments, I updated my packages to version 7.1.2, to no avail. Returning the query to postman gives following output:

function getQuery() {
// always return a string, because this is the raw query string.
// if the queryParser plugin is used, req.query will provide an empty
// object fallback.
return this.getUrl().query || '';
}

EDIT 2: Tried going the Express route by importing Request as follows: import { Request } from "express"; . The code now looks like this:

@Get('getleasingcompany')
  async getLeasingCompany(@Req() request: Request) {
    console.log(request);
}

A part of this log does show me that the query saved the variable:

originalUrl: '/licenseplate/getleasingcompany?licenseplate=1-WMW-478',
  _parsedUrl:
   Url {
     protocol: null,
     slashes: null,
     auth: null,
     host: null,
     port: null,
     hostname: null,
     hash: null,
     search: '?licenseplate=1-WMW-478',
     query: 'licenseplate=1-WMW-478',
     pathname: '/licenseplate/getleasingcompany',
     path: '/licenseplate/getleasingcompany?licenseplate=1-WMW-478',
     href: '/licenseplate/getleasingcompany?licenseplate=1-WMW-478',
     _raw: '/licenseplate/getleasingcompany?licenseplate=1-WMW-478' },

However, when logging the request.query , I still get [Function: GetQuery] as the result.

Nothing looks wrong in your code. On Nest v7 using the following controller and curl I get what you'd expect

import { Controller, Get, Query } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(@Query() query: Record<string, any>): string {
    console.log(query);
    return this.appService.getHello();
  }
}
curl http://localhost:3000/\?queryparam\=something
[Nest] 46471   - 06/02/2020, 2:55:11 PM   [NestFactory] Starting Nest application...
[Nest] 46471   - 06/02/2020, 2:55:11 PM   [InstanceLoader] AppModule dependencies initialized +12ms
[Nest] 46471   - 06/02/2020, 2:55:11 PM   [RoutesResolver] AppController {}: +15ms
[Nest] 46471   - 06/02/2020, 2:55:11 PM   [RouterExplorer] Mapped {, GET} route +9ms
[Nest] 46471   - 06/02/2020, 2:55:11 PM   [NestApplication] Nest application successfully started +9ms
{ queryparam: 'something' }

My only guess is some mismatched version of Nest

I haven't found why the program didn't work as intended, I have however fixed the issue simply by starting a new Nest project. When I noticed this project did work as intended, I copied over all the files except for package.json and reinstalled all the necessary dependencies one by one. I only deleted 1 dependency, restify , which I ended up not needing. It worked with the package though, so that wasn't the issue.

Due to these findings, I suppose it must have been a versioning issue, though I'm still not sure.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM