在 Express Typescript 中添加类型/cors 后,POSTMAN 请求保持挂起

问题描述 投票:0回答:1

我有一个 React Web 应用程序,后端使用 Express TypeScript。到目前为止,我有一个 POST 请求,在此之前它运行良好。

issueController.ts

import { RequestHandler } from 'express';
import { Issue } from '../interfaces/issue.interface';

export const createIssue: RequestHandler = (req, res, next) => {
  const issue = req.body as Issue;
  res.status(200).json({message: 'issue created successfully', 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) {
        res.status(400).json({ message: 'fail'})
    }
}

问题Route.ts

import { Router } from 'express';
const router = Router();
import { createIssue } from '../controllers/issueController';
import { validateIssueRequest } from '../middleware/request-validation.middleware';

router.post('/create-issue', validateIssueRequest, createIssue); 

export default router;

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.listen(port, () => {
    console.log(`Listening to port ${port}`)
});

app.use('/issue', issueRoutes);

问题是 POST 请求一直挂在 Postman 上,但它也没有返回任何错误。我的 package.json 看起来像这样:

package.json

 "devDependencies": {
    "@types/cors": "^2.8.17",
    "@types/express": "^4.17.21",
    "@types/node": "^20.11.25",
    "dotenv": "^16.4.5",
    "nodemon": "^3.1.0",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.2"
  },
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.18.3",
    "express-validator": "^7.0.1"
  }

我不知道我的代码有什么问题,因为我返回了 JSON 响应。

reactjs node.js typescript express cors
1个回答
0
投票

您的

validateIssueRequest
中间件函数不会返回响应,也不会调用下一个函数。这就是它挂起的原因。

来自 Express.js 文档

如果当前中间件函数没有结束请求-响应 循环中,必须调用 next() 将控制权传递给下一个中间件 功能。否则,该请求将被悬而未决。

您需要从中间件调用

next
函数将请求周期传递给
createIssue

© www.soinside.com 2019 - 2024. All rights reserved.