node.js - Express TypeError: Router.use() 需要一个中间件函数,但有一个未定义的
问题描述
所以我见过很多像我遇到的问题,但我不明白为什么会发生这种情况,所以请帮助兄弟。
我有一个带有 Express + Typescript 的简单 API,带有两个简单的控制器。主控制器,用于“默认”登陆路由“localhost:port”。口袋妖怪控制器,用于获取口袋妖怪,在 /pokemon 路线下。
所有路由器都在 index.ts 文件中导出,并在 server.ts 中导入
家庭控制器.ts
import { Router, Request, Response } from "express";
const router: Router = Router();
router.get("/", (req: Request, res: Response) => {
res.send("Hi, welcome to my Pokemon Api");
});
export const HomeController: Router = router;
口袋妖怪控制器.ts
import { Router, Request, Response } from "express";
import Pokemon from "../entities/pokemon";
const router: Router = Router();
const pokemons: Pokemon[] = getPokemons(); // Get pokemons from a file/DB, irrelevant
router.get("/", (req: Request, res: Response) => {
if (pokemons !== undefined) {
res.status(200).json(pokemons);
} else {
res.status(500).send("Error retrieving the list of Pokemons");
}
});
export const PokemonController: Router = router;
索引.ts
// note the order of these two controllers
export * from "./pokemon.controller";
export * from "./home.controller";
服务器.ts
import express from "express";
import { HomeController, PokemonController } from "./controllers";
const app: express.Application = express();
const port: number = 3000;
app.use("", HomeController);
app.use("/pokemon", PokemonController);
app.listen(port, () => {
console.log(`Listening at port ${port}`);
});
好的,这段代码完全按预期工作 100%。但是,如果我切换在 index.ts 中导出控制器的顺序,它会崩溃。所以如果不是上面的,我使用 index.ts
export * from "./home.controller";
export * from "./pokemon.controller";
我收到此错误:TypeError: Router.use() 需要中间件函数但未定义。
任何想法 1.为什么会根据顺序发生问题(HomeController 上肯定有一些我没有得到的东西,以及 2.如何在不切换 index.ts 的导出顺序的情况下修复它?
堆栈跟踪:
MYFOLDER\node_modules\express\lib\router\index.js:458
throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
^
TypeError: Router.use() requires a middleware function but got a undefined
at Function.use (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\node_modules\express\lib\router\index.js:458:13)
at Function.<anonymous> (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\node_modules\express\lib\application.js:220:21)
at Array.forEach (<anonymous>)
at Function.use (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\node_modules\express\lib\application.js:217:7)
at Object.<anonymous> (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\app\server.ts:8:5)
at Module._compile (module.js:653:30)
at Module.m._compile (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\node_modules\ts-node\src\index.ts:439:23)
at Module._extensions..js (module.js:664:10)
at Object.require.extensions.(anonymous function) [as .ts] (D:\Mese\Documentos\Proyectos\Pokeapp\PokeApp.api\node_modules\ts-node\src\index.ts:442:12)
at Module.load (module.js:566:32)
解决方案
推荐阅读
- python - 为什么 find 对象不可迭代?
- wso2 - 如何在 WSO2 DSS 的输出 json 映射中将 json 元素配置为可选?
- c# - 如何在 C# 中使用 lambda 表达式从列表中获取一些属性
- python - SQL server python service-"DECLARE @myscript NVARCHAR(MAX) = N'" 给出语法错误,可能的错误是什么?
- php - 如何通过 AJAX 提交多个值/数组?
- c# - C#在CSV文件的字符串之间添加一个空白值
- c++ - 如何调用合适的构造函数
- sql-server - 使用 update_batch() 添加新行
- javascript - Particle Js Canvas 在其他 div 中溢出
- c++ - stoi() 和 stod() 正在终止我的程序,我真的不知道为什么