typestack / routing-controllers

Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage in Express / Koa using TypeScript and Routing Controllers Framework.
MIT License
4.36k stars 393 forks source link

fix: body in middleware is undefined. I have bodyParser #1382

Closed Zekhap closed 1 month ago

Zekhap commented 2 months ago

Description

I'm trying to print the request.body in my console from the middleware but its undefined I've googled everywhere and tested allot of things, yet i cant seem to find my answer.

Minimal code-snippet showcasing the problem

@Service()
@Middleware({ type: "before" })
export class DemoMiddleware implements ExpressMiddlewareInterface {
  async use(request: any, response: any, next: (err?: any) => any): Promise<any> {
    console.log("-DemoMiddleware-");

    console.log(request.body); //Is undefined
    next();
  }
}

@JsonController("/")
export class DemoController {
    @Post("test")
    demoPost(@Body() params: DemoResponse, @Res() response: Response) {
        console.log("-DemoPost-");

        return response.status(200).json({ message: "i got post", params: params });
    }
}
export class DemoResponse {
    username: string;
    password: string;
}

createExpressServer({
    controllers: [DemoController],
    middlewares: [
        bodyParser.json(),
        bodyParser.urlencoded({ extended: true }),
        DemoMiddleware
    ],
    routePrefix: '/api',
}).listen(3000);

Expected behavior

I expect to get the json that i posted

package.json "body-parser": "^1.20.2", "reflect-metadata": "^0.2.2", "routing-controllers": "^0.10.4", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "typedi": "^0.10.0",

attilaorosz commented 1 month ago

Do you use your own express instance or the lib creates it? Seems like body-parser was not running before the middleware.

Zekhap commented 1 month ago

Oh, sorry I forgot to close this I actually tested a bit more and solved my problem.

Apparently I need to have my body parser inside a middleware. It does not work if I use the routing-controllers { middlewares:{ bodyparser()} }

github-actions[bot] commented 3 weeks ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.