gg-express
Version:
**GG-Express** is an Express.js wrapper that enforces strong type requirements for `GET`, `POST`, `PUT`, and `DELETE` methods. It ensures that `req.query` and `req.body` follow strict structure definitions and automatically generates an `apiConnector` cla
117 lines (98 loc) ⢠3.25 kB
Markdown
# š GG-Express
**GG-Express** is an Express.js wrapper that enforces strong type requirements for `GET`, `POST`, `PUT`, and `DELETE` methods. It ensures that `req.query` and `req.body` follow strict structure definitions and automatically generates an `apiConnector` class file for easy use in front-end development. ššš
## ⨠Features
- **Strict Type Enforcement**: Ensures that `req.query` and `req.body` follow the declared types.
- **Auto-Generated API Connector**: Automatically creates a static API class for strongly-typed parameters.
- **Seamless Front-End Integration**: Simplifies the connection between the back-end and front-end by enforcing consistency.
## š Key Points
- **Strict Parameter Enforcement**: GG-Express ensures only the declared parameters are accessible in `req.body` or `req.query`.
- **Type-Safe Responses**: Ensures that the backend responds with a structure that matches front-end expectations.
- **API Connector Generation**: It automatically generates a type-safe API connector class file for the front-end.
## š Installation
```bash
npm install gg-express
```
š§āš» Use Case in Backend
```typescript
import express from "express"
import GGExpress from "gg-express"
const app = express()
// Initialize GG-Express with backend and frontend file paths
const ggapp = new GGExpress(app, [
"./server/output-path-for-apiConnector.ts", // Path to generate apiConnector.ts backend file
"./myapp/output-path-for-apiConnector.ts", // Path to generate apiConnector.ts frontend file
])
// Example of a POST request with enforced parameters
ggapp.post(
"/api/item",
{
requireParams: {
parameter: { lotNumber: "number" },
dataType: "arrayObject",
structure: {
id: "number",
name: "string",
price: "number",
},
},
responseStructure: {
parameter: { numberOfPeople: "number", itemName: "string" },
dataType: "arrayObject",
structure: {
id: "number",
name: "string",
},
},
},
(req, res, next) => {
// Access only the required parameters declared above
const data = req.body.data
// Response structure follows the predefined format
return res.json({
message: "",
status: "SUCCESS",
data: [],
parameter: {
itemName: "",
numberOfPeople: 2,
},
})
}
)
// Start the server and generate the API files
app.listen(3000, () => {
ggapp.generateAPIFiles() // Generates the apiConnector class for front-end use
})
```
š² Use Case in Frontend
⢠The apiConnector.ts file will be automatically generated by the GGExpress class you configured in the backend
```typescript
import GGApi from "apiConnector.ts"
const api = new GGApi()
const response = await api.post("/api/item", {
parameter: {
lotNumber: 2,
},
data: [
{
id: 1032,
name: "machete",
price: 4599,
},
],
})
console.log(response.data)
// Expected data structure:
// parameter: { numberOfPeople: number, itemName: string },
// structure: {
// id: number,
// name: string,
// }[],
// }
```
## š Keywords
- Express.js
- TypeScript
- API wrapper
- Type-safe API
- Backend-frontend integration