very-express
Version:
based on json schema and openapi, generate Express RestApi server with mongoDb
144 lines (129 loc) • 4.27 kB
text/typescript
// {{headerComment}}
import { Response } from "express";
/**
* @param res express response object
* @param status http response code
* @param code response code
* @param message response message, default is response message by response code
* @param result response data
* @returns express response object
*/
export function send<T = undefined>(
res: Response,
status: number = 200,
body?: {
code?: ResponseCode,
message?: string | null,
result?: T,
}
): Response<any, Record<string, any>> {
const noBody = !body || (body.code === undefined && body.message === undefined && body.result === undefined);
if (noBody) {
return res.status(status).send();
}
else {
const code: ResponseCode | undefined = body?.code ?? responseStatusCodeMap.get(status) ?? responseCode.SERVER_ERROR;
const msg: string | undefined = body?.message ?? (code ? responseMessage[code] : undefined);
return res.status(status)
.header({
"Content-Type": "application/json",
})
.json({
ret_code: code,
ret_msg: msg,
elapse: Date.now() - res.locals?.startAt || 0,
result: body?.result,
});
}
}
const responseMessage : Record<string, string> = {
DB_CONN_ERR: "Database connection error",
SERVER_ERROR: "Unknown Server Error",
success: "Success",
err_db_data: "Corrupted Database Record",
err_permission: "Permission Denied",
err_payload: "Invalid Request Payload",
err_query: "Invalid Request Query",
err_body: "Invalid Request Body",
err_validation: "Validation Error",
err_query_validation: "Query Validation Error",
err_body_validation: "Body Validation Error",
err_create: "Falied to Insert Data",
err_read: "Falied to Read Data",
err_update: "Falied to Edit Data",
err_delete: "Falied to Delete Data",
};
const responseCode = Object.keys(responseMessage).reduce((acc, key) => {
acc[key] = key as ResponseCode;
return acc;
}, {} as Record<string, ResponseCode>);
const responseStatusCodeMap = new Map<number, string>([
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
]);
export type ResponseCode = string;
export default {
send,
msg: responseMessage,
code: responseCode,
statusCodeMap: responseStatusCodeMap,
};