Ya maneje la organización de manera distinta usando clases en typescript, y dentro de las clases manejo los middlewares, routes o listen del servidor mediante métodos.
Mi estructura de directorios es algo así
el index.ts ubicado en el directorio raíz inicialice la clase y posteriormente ejecuta el método listen
import {Server} from "./app/server"
const server = new Server();
server.listen()
y el index.ts dentro de app/server/ se encuentra la clase donde se ejecuta express
import express from "express";
import products from "../routes/products";
export class Server {
port: string | number;
app: express.Application;
paths: { [index: string]: string };
constructor() {
this.port = 8000,
this.app = express(),
this.paths = {
products: "/api/products",
users: "/api/users",
categories: "/api/categories"
};
this.routes();
}
routes(): void {
this.app.use(this.paths.products, products)
}
listen(): void {
this.app.listen(this.port, () => {
console.log(`Corriendo en ${this.port}`);
});
}
}
y para las rutas es muy similar a como lo realiza el instructor, ejemplo para products.ts
import { Router } from "express";
import faker from "faker";
const router = Router();
router.get("/", (req, res) => {
const { size } = req.query;
const products = [];
const limit = size || 100;
for (let index = 0; index < limit; index++) {
products.push({
name: faker.commerce.productName(),
price: parseInt(faker.commerce.price(), 10),
image: faker.image.imageUrl(),
});
}
res.send(products);
});
router.get("/filter", (req, res) => {
res.json({ msg: "Soy un filtro" });
});
router.get("/:id", (req, res) => {
const { id } = req.params;
res.send({ id, name: "product1", price: "1000" });
});
export default router;
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?