为啥 Router() Express 函数返回未定义?
Posted
技术标签:
【中文标题】为啥 Router() Express 函数返回未定义?【英文标题】:Why is the Router() Express function returning undefined?为什么 Router() Express 函数返回未定义? 【发布时间】:2021-12-05 22:40:54 【问题描述】:我正在使用 TypeScript 和 Express 创建一个遵循清洁架构原则的 API。我将应用程序的每条路由分开到一个文件夹中,然后将它们全部导入到index.ts
文件中,将每个路由合并到一个唯一的路由器中并导出相同的路由。我的问题是这个唯一文件的导入返回undefined
。
我认为这不是我的代码本身的问题,因为 TypeScript 可以正确推断导入文件的类型,并且在开发过程中不会报告任何错误。我遇到的唯一错误是在尝试运行代码时发生的:
TypeError:
app.use()
需要中间件函数
这是导致错误的代码sn-p:
// 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
;
我读到in another question undefined
返回曾经发生在 Express 版本 3 中,但我使用的是 4.17.13
版本,所以我认为这不是问题的原因。事实上,我不知道可能是什么。我试图通过在index.ts
文件中使用console.log(router)
来查看路由器内容(在被expressInstance.ts
导入之前),但它不起作用,因为代码甚至没有执行。
【问题讨论】:
***.com/questions/32883626/…? @Andy 这并不能解决我的问题。 【参考方案1】:尝试将路径添加到您的.use()
例如:
expressInstance.use('/users', router); // in the case you wanted the router to be for users
【讨论】:
尝试使用“/v1”但没有成功,但我收到了一个不同的错误:app.use() requires a middleware function but received a undefined
,或类似的东西。具体记不清了。以上是关于为啥 Router() Express 函数返回未定义?的主要内容,如果未能解决你的问题,请参考以下文章
express js 中的 Socket.io:Router.use 需要中间件功能但未定义