nestjsx / crud

NestJs CRUD for RESTful APIs
https://github.com/nestjsx/crud/wiki
MIT License
4.04k stars 534 forks source link

nvalid param id. Number expected #615

Closed avifatal closed 3 years ago

avifatal commented 3 years ago

Hi, I want to a custom route to a crud controller. /users/me when I call it I get the error bellow

@Crud({ model: { type: UserEntity } })
@Controller('users')
export class UsersController extends BaseCrudController<UserEntity> {
    @Get('me')
    async me(){return await ...}
}

@Entity({name: 'UserEntity'})
export class UserEntity extends BaseEntity{
    @PrimaryGeneratedColumn()
    id: number;
}
nest            | Invalid param id. Number expected
nest            | Error: Invalid param id. Number expected
nest            |     at CrudRequestInterceptor.intercept (/usr/src/app/node_modules/@nestjsx/crud/lib/interceptors/crud-request.interceptor.js:39:19)
nest            |     at /usr/src/app/node_modules/@nestjs/core/interceptors/interceptors-consumer.js:23:36
nest            |     at InterceptorsConsumer.intercept (/usr/src/app/node_modules/@nestjs/core/interceptors/interceptors-consumer.js:25:24)
nest            |     at /usr/src/app/node_modules/@nestjs/core/router/router-execution-context.js:46:60
nest            |     at processTicksAndRejections (internal/process/task_queues.js:93:5)
nest            |     at async /usr/src/app/node_modules/@nestjs/core/router/router-proxy.js:9:17

Thanks

ghost commented 3 years ago

NestJS v6.5.2

I have same problem ... I don't want to pass any parameter to my route @Get() and result :

@Get('count-validated')
@ApiResponse({ status: 200, type: CountValidatedDtoOut })
public async getCountValidated(): Promise<CountValidatedDtoOut> {
     return await this.service.getCountValidated();
}

Error return =>

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Invalid param id. Number expected"
}
ghost commented 3 years ago

I found the solution !! If you read the documentation (here) you can set the id params to disabled and by default it is false. Example :

@Crud({
    model: {
        type: TotoEntity,
    },
    params: {
        id: {
            field: 'id',
            type: 'number',
            primary: true,
            disabled: true, // <= HERE
        },
    },
    ...
})
@Controller('/toto')
export class TotoController implements CrudController<TotoEntity> {...}

And thanks to that you will be able to do @Get () without having to enter an id.