поэтому я видел множество проблем, подобных той, что получил, но я не понимаю, почему это происходит, поэтому, пожалуйста, помогите брату.
У меня есть простой API с Express + Typescript, сдва простых контроллера.Домашний контроллер, для «по умолчанию» маршрут посадки «localhost: port».Контроллер Pokemon, для получения pokemons, по маршруту / pokemon.
Все маршрутизаторы экспортируются в файл index.ts и импортируются в server.ts
home.controller.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;
pokemon.controller.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;
index.ts
// note the order of these two controllers
export * from "./pokemon.controller";
export * from "./home.controller";
server.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?
StackTrace:
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)