我使用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