添加@types/cors后Express TypeScript的POST请求在Postman中持续挂起
POST请求挂起无响应的核心问题及修复方案
问题1:验证中间件未传递请求到下一个处理环节
你的validateIssueRequest中间件仅在请求体为空时返回错误,但当验证通过时,没有调用next()将请求流转到后续的createIssue控制器。这会导致请求一直处于挂起状态,因为Express不知道该继续处理这个请求。
修改后的issue.middlewares.ts:
import { Issue } from '../interfaces/issue.interface'; import { Request, Response, NextFunction } from 'express'; export function validateIssueRequest(req: Request, res: Response, next: NextFunction) { const issue = req.body as Issue; if(!issue) { return res.status(400).json({ message: 'fail'}) } // 验证通过,传递请求到下一个处理函数 next(); }
注意:给错误响应加上return,避免后续代码意外执行。
问题2:路由挂载在服务器启动之后
app.listen()会启动Express服务器,之后再挂载路由app.use('/issue', issueRoutes),这些路由不会被注册到已启动的服务器上,导致请求无法匹配到对应的路由处理逻辑。
修改后的index.ts(调整路由挂载位置):
import express from 'express'; const app = express(); const port = 3001; import issueRoutes from './routes/issueRoute'; import cors from 'cors'; const allowedOrigins = ['http://localhost:5173']; const options = { origin: allowedOrigins }; app.use(cors(options)); // 修正多余的括号 app.use(express.json()); // 先挂载路由,再启动服务器 app.use('/issue', issueRoutes); app.listen(port, () => { console.log(`Listening to port ${port}`) });
问题3:CORS配置语法冗余
原代码中app.use(cors((options)));多了一层括号,虽然可能不触发错误,但不符合规范,修正为app.use(cors(options));即可。
完成以上修改后,重启服务器,Postman的POST请求应该能正常收到响应了。
内容的提问来源于stack exchange,提问作者red17
相关产品推荐
相关产品推荐

