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
412 stars 29 forks source link

Exception Thrown when requesting declared path #519

Closed punteroo closed 1 year ago

punteroo commented 1 year ago

I've declared an API route for various authentication methods, but upon querying it I always get the same error (even if using the decorator for one route, such as @Post()

HTTP Request

{
    "statusCode": 500,
    "message": "An unknown error occurred.",
    "errors": [
        "An unknown error occurred."
    ],
    "stack": "TypeError: Cannot read properties of undefined (reading 'length')\n    at D:\\Programming\\GitHub\\momischool\\node_modules\\next-api-decorators\\dist\\internals\\handler.js:45:50\n    at Array.map (<anonymous>)\n    at Auth.runMainLayer (D:\\Programming\\GitHub\\momischool\\node_modules\\next-api-decorators\\dist\\internals\\handler.js:41:62)\n    at descriptor.value (D:\\Programming\\GitHub\\momischool\\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 (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\api-utils\\node.js:363:9)\n    at async DevServer.runApi (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\next-server.js:487:9)\n    at async Object.fn (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\next-server.js:749:37)\n    at async Router.execute (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\router.js:253:36)\n    at async DevServer.run (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\base-server.js:384:29)\n    at async DevServer.run (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\dev\\next-dev-server.js:741:20)\n    at async DevServer.handleRequest (D:\\Programming\\GitHub\\momischool\\node_modules\\next\\dist\\server\\base-server.js:322:20)"
}

api/auth/[[...params]].ts

import { Post, Body, HttpCode, ValidationPipe, InternalServerErrorException, createHandler } from "next-api-decorators";
import { UserDto } from "../../../src/lib/dto/user.dto";
import { connectToMongo } from "../../../src/lib/mongo";
import { registerUser } from "../../../src/lib/repo/user.repo";
import logger from "../../../src/utils/logger";

class Auth {
  @Post('/register')
  @HttpCode(201)
  public async registerNewUser(@Body(ValidationPipe) body: UserDto) {
    // Connect to the database.
    try {
      await connectToMongo();
    } catch (e) {
      logger.error(`Failed to establish connection to MongoDb: ${e}`);
      throw new InternalServerErrorException(e);
    }

    try {
      // Instance the new user.
      const doc = await registerUser(body);

      return doc;
    } catch (e) {
      logger.error(`Failed to register a new user: ${e}`);
      throw new InternalServerErrorException(e);
    }
  }
}

export default createHandler(Auth);

As for package versions here's what I'm using currently.

  "dependencies": {
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "eslint": "8.30.0",
    "eslint-config-next": "13.0.7",
    "framer-motion": "^8.0.1",
    "mongoose": "^6.8.1",
    "next": "^13.1.0",
    "next-api-decorators": "^2.0.0",
    "path-to-regexp": "^6.2.1",
    "pino": "^8.8.0",
    "pino-pretty": "^9.1.1",
    "react": "18.2.0",
    "react-dom": "18.2.0"
  }
ggurkal commented 1 year ago

Duplicate of https://github.com/instantcommerce/next-api-decorators/issues/457