instantcommerce / next-api-decorators

Collection of decorators to create typed Next.js API routes, with easy request validation and transformation.
https://next-api-decorators.vercel.app
MIT License
409 stars 29 forks source link

Body decorator throws 500 unknown error on version 2.0.2 #575

Closed EricEchemane closed 1 year ago

EricEchemane commented 1 year ago

Example code ./src/pages/api/user/[[...params]].ts

import { IsNotEmpty } from 'class-validator';
import {
    Body,
    createHandler,
    Post,
    ValidationPipe,
} from 'next-api-decorators';

class CreateUserDto {
    @IsNotEmpty()
    name!: string;
}

class User {
    @Post()
    store(@Body(ValidationPipe) body: CreateUserDto) {
        return body;
    }
}

export default createHandler(User);

The unknown error

{
    "statusCode": 500,
    "message": "An unknown error occurred.",
    "errors": [
        "An unknown error occurred."
    ],
    "stack": "TypeError: Cannot read properties of undefined (reading 'length')\n    at C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next-api-decorators\\dist\\internals\\handler.js:45:50\n    at Array.map (<anonymous>)\n    at User.runMainLayer (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next-api-decorators\\dist\\internals\\handler.js:41:62)\n    at descriptor.value (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next-api-decorators\\dist\\internals\\handler.js:105:32)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Object.apiResolver (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\api-utils\\node.js:372:9)\n    at async DevServer.runApi (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\next-server.js:514:9)\n    at async Object.fn (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\next-server.js:828:35)\n    at async Router.execute (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\router.js:243:32)\n    at async DevServer.runImpl (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\base-server.js:432:29)\n    at async DevServer.run (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\dev\\next-dev-server.js:831:20)\n    at async DevServer.handleRequestImpl (C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\base-server.js:375:20)\n    at async C:\\Users\\echem\\OneDrive\\Desktop\\Practice\\rn\\server\\node_modules\\next\\dist\\server\\base-server.js:157:99"
}

I manage to make it work with version 2.0.1