Estoy usando TypeScript y Express para crear una API que sigue los principios de Clean Architecture. Separé cada ruta de mi aplicación en una carpeta y luego las importé todas a un archivo index.ts , fusionando cada una dentro de un enrutador único y exportando lo mismo. Mi problema es que la importación de este archivo único está devolviendo undefined .
Creo que no es un problema de mi código en sí, ya que TypeScript puede inferir correctamente el tipo de archivo importado y no informa ningún error durante el desarrollo. El único error que obtengo ocurre cuando intento ejecutar el código:
TypeError:
app.use()requiere una función de middleware
Este es el fragmento de código que causa el error:
// expressInstance.ts --> Imported by the "server.ts" file, where listening the server happens import express from "express"; import cors from "cors"; import { router } from ".."; // File with all the routes const expressInstance = express(); expressInstance.use(express.urlencoded({extended: false})); expressInstance.use(express.json()); expressInstance.use(cors()); expressInstance.use(router); // Line where the error appears export { expressInstance }; Y este es el código del archivo del router importado:
// index.ts import { Router } from "express"; import { userRouter } from "./user.routes"; import { postRouter } from "./post.routes"; const router = Router(); router.use("/user", userRouter); router.use("/post", postRouter); export { router }; Leí en otra pregunta que el retorno undefined solía ocurrir en la versión 3 de Express, pero uso la versión 4.17.13 , por lo que creo que esta no es la causa del problema. De hecho, no tengo ni idea de lo que podría ser. Traté de ver el contenido del enrutador usando console.log(router) en el archivo index.ts (antes de que expressInstance.ts lo importara), pero no funcionó porque el código ni siquiera se ejecutó.
Intenta agregar una ruta a tu .use()
p.ej:
expressInstance.use('/users', router); // in the case you wanted the router to be for users