Response Classes
LightTs provides HttpResponse, DataResponse, and MessageResponse to standardize API success responses. Generated by lts add responses, these classes ensure clean, consistent output using native Node.js and Express, keeping your API lightweight.
Generated Files
Section titled “Generated Files”The lts add responses command adds the following to src/core/responses/, using kebab-case for file names:
Directorysrc/
Directorycore/
Directoryresponses/
- data.response.ts
- message.response.ts
- index.ts
Response Classes
Section titled “Response Classes”These classes use camelCase for methods and variables, providing flexible response formatting.
import { Response } from 'express';
export class HttpResponse { public readonly statusCode: number; public readonly message: string | undefined; public readonly data: any; public readonly meta?: any;
constructor( res: Response, { statusCode = 200, message, data = null, meta }: { statusCode?: number; message?: string; data?: any; meta?: any; } ) { this.statusCode = statusCode; this.message = message; this.data = data; this.meta = meta;
let options = {};
options['statusCode'] = this.statusCode; if (this.message) options['message'] = this.message; if (this.data) options['data'] = this.data; if (this.meta) options['meta'] = this.meta;
res.status(statusCode).json(options); }}import { Response } from 'express';import { HttpResponse } from '.';
export class DataResponse extends HttpResponse { constructor( res: Response, { data, message = 'data retrieved', statusCode = 200, meta }: { data: any; message?: string; statusCode?: number; meta?: any; } ) { super(res, { statusCode, message, data, meta }); }}import { Response } from 'express';import { HttpResponse } from '.';
export class MessageResponse extends HttpResponse { constructor( res: Response, { message = 'success', statusCode = 200, meta }: { message?: string; statusCode?: number; meta?: any; } ) { super(res, { statusCode, message, data: null, meta }); }}Example Usage
Section titled “Example Usage”Use DataResponse for data-heavy responses and MessageResponse for simple success messages, paired with a simple controller (Express Router).
import { DataResponse } from '@/core/responses/data.response';import { MessageResponse } from '@/core/responses/message.response';import { Request, Response } from 'express';
export default { getUsers: async (req: Request, res: Response) => { const users = [{ id: 1, name: 'John Doe' }];
return new DataResponse(res, { data: users, message: 'Users fetched!', statusCode: 200, }); }, createUser: async (req: Request, res: Response) => { return new MessageResponse(res, { message: 'User created!', statusCode: 201 }); },};- Customization: Extend
HttpResponseinsrc/core/responses/for custom response types. - Naming Conventions: Files use kebab-case (e.g.,
data.response.ts), classes and methods use camelCase (e.g.,DataResponse,getUsers). - Usage: Use
DataResponsefor endpoints with data,MessageResponsefor simple confirmations.
See Responses in Action Try a user management API with standardized responses.