为什么Router() Express函数返回undefined?



我使用TypeScript和Express来创建一个遵循Clean Architecture原则的API。我将应用程序的每条路由都放在一个文件夹中,然后将它们全部导入到一个index.ts文件中,将每个路由合并到一个唯一的路由器中,并导出相同的路由。我的问题是输入这个唯一的文件返回undefined

我认为这不是我代码本身的问题,因为TypeScript可以正确推断导入文件的类型,并且在开发过程中不会报告任何错误。我得到的唯一错误只是发生在尝试运行代码时:

TypeError:app.use()requires a middleware function

这是导致错误的代码片段:

// 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
};

这是导入的router文件的代码:

// 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
};

我在另一个问题中读到undefined返回过去发生在Express版本3,但我使用4.17.13版本,所以我认为这不是问题的原因。事实上,我不知道会是什么。我试图通过在index.ts文件中使用console.log(router)来查看路由器内容(在被expressInstance.ts导入之前),但它不起作用,因为代码甚至没有执行。

尝试为.use()添加路径

例句:

expressInstance.use('/users', router);  // in the case you wanted the router to be for users