40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { IncomingMessage, ServerResponse } from 'http';
|
|
|
|
export async function parseJsonBody<T>(req: IncomingMessage): Promise<T> {
|
|
const chunks: Buffer[] = [];
|
|
for await (const chunk of req) {
|
|
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
}
|
|
const raw = Buffer.concat(chunks).toString('utf8').trim();
|
|
if (!raw) {
|
|
return {} as T;
|
|
}
|
|
return JSON.parse(raw) as T;
|
|
}
|
|
|
|
export function setCorsHeaders(res: ServerResponse): void {
|
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
}
|
|
|
|
export function sendJson(res: ServerResponse, statusCode: number, payload: unknown): void {
|
|
setCorsHeaders(res);
|
|
res.statusCode = statusCode;
|
|
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
res.end(JSON.stringify(payload));
|
|
}
|
|
|
|
export function sendNoContent(res: ServerResponse): void {
|
|
setCorsHeaders(res);
|
|
res.statusCode = 204;
|
|
res.end();
|
|
}
|
|
|
|
export function sendText(res: ServerResponse, statusCode: number, text: string): void {
|
|
setCorsHeaders(res);
|
|
res.statusCode = statusCode;
|
|
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
res.end(text);
|
|
}
|