import { Controller, Get, Res } from '@nestjs/common'; import { Response } from 'express'; @Controller('items') export class ItemsController { @Get() getItems(@Res() res: Response) { res.json({ message: 'List of items' }); } }
Using res.json() sends a JSON response with status code 200 by default.
import { Controller, Get, Res } from '@nestjs/common'; import { Response } from 'express'; @Controller('test') export class TestController { @Get('header') setHeader(@Res() res: Response) { // Add custom header here res.send('Header set'); } }
The res.set() method sets HTTP headers correctly. res.header() is an alias but not recommended in NestJS context. res.addHeader() does not exist. res.append() appends values to existing headers.
import { Controller, Get } from '@nestjs/common'; @Controller('users') export class UsersController { @Get('profile') getProfile() { return { id: 1, name: 'Alice', active: true }; } }
Returning a plain object from a controller method sends it as JSON with correct types preserved.
import { Controller, Get, Res } from '@nestjs/common'; import { Response } from 'express'; @Controller('orders') export class OrdersController { @Get('list') listOrders(@Res() res: Response) { res.json({ orders: [] }); } }
When using @Res() and calling res methods directly, you should not return a value. Returning causes NestJS to try sending response again, leading to an error.
By default, NestJS uses class-transformer to serialize returned objects to JSON. You can control which properties are included using decorators like @Exclude and @Expose.
