Postman无法请求Express路由:TypeScript环境路由配置问题求助
Express + TypeScript 独立路由无响应问题排查与修复
问题场景
我正在学习用TypeScript开发Express+Node.js应用,配置独立路由时遇到问题:
- 在
bookRoutes.ts中定义的路由挂载到主文件后,Postman请求无响应 - 直接在主模块里定义
/book路由时,能正常获取响应
路由文件(bookRoutes.ts)代码:
import express,{ Express, Router,Response, Request } from "express"; export const bookRoute = Router(); bookRoute.use(express.json) bookRoute.get('/book',(req:Request,res:Response) =>{ res.send("Hola"); });
主文件代码:
import express, { Express,Request,Response } from "express"; import * as bookRoutes from "./modules/book/bookRoutes"; import { Router } from "express"; const app: Express = express(); const port = process.env.PORT || 3000; app.use('/',bookRoutes.bookRoute) app.listen(port, () => { console.log(`[server]: Server is running at http://localhost:${port}`); });
问题原因
express.json是一个工厂函数,需要执行后返回可使用的中间件实例。原代码中bookRoute.use(express.json)没有加括号,相当于传递了函数本身而非执行后的中间件,导致请求处理被阻塞,无法返回响应。
修复方案
1. 修正express.json的调用方式
修改bookRoutes.ts中的中间件配置,给express.json加上括号:
bookRoute.use(express.json());
2. 修复后的完整bookRoutes.ts代码
import express,{ Router,Response, Request } from "express"; export const bookRoute = Router(); // 修复:执行express.json获取中间件实例 bookRoute.use(express.json()); bookRoute.get('/book',(req:Request,res:Response) =>{ res.send("Hola"); });
可选优化:调整路由挂载前缀
如果想让路由结构更清晰,可以在主文件中修改挂载路径,比如:
// 挂载到/api前缀下,访问路径变为http://localhost:3000/api/book app.use('/api', bookRoutes.bookRoute);
如果仍需使用/book作为访问路径,保持原app.use('/', bookRoutes.bookRoute)即可。
内容的提问来源于stack exchange,提问作者Isaac Anatolio
相关产品推荐
相关产品推荐

