为啥 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 cookie 返回未定义

为啥我得到 TypeError('Router.use()

express js 中的 Socket.io:Router.use 需要中间件功能但未定义

Express,第二次调用then()函数,用猫鼬保存对象后返回未定义对象

#2 中间件, 路由,router,https