首页 > 解决方案 > POST 请求保持等待状态,但从未给出响应

问题描述

我的 MERN 项目的后端服务器有问题。当我查看 google chrome 的控制台时,api 请求只是挂起,很长一段时间后它就失败了。

server.js 代码

const express = require('express');
const cors = require('cors');
const app = express();
const morgan = require('morgan');
const connectDB = require('./db');
const authRoutes = require('./routes/auth');


app.use(cors);
app.use(morgan('dev'));
app.use(express.json());
app.use('/api/auth', authRoutes)
connectDB();

const port = process.env.PORT || 8080;
app.listen(port, () => console.log(`Listening on port:${port}`));

auth.js 文件

const express = require('express');
const { signupValidator, validatorResult } = require('../middleware/validator')
const router = express.Router();

router.post('/signup', signupValidator, validatorResult);

module.exports = router;

验证器.js

const { check } = require('express-validator');
exports.signupValidator = [
    check('username').not().isEmpty().trim().withMessage('All fields are requeired'),
    check('email').isEmail().normalizeEmail().withMessage('Invalid Email'),
    check('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long')
]
exports.validatorResult = (req, res, next) => {
    const result = this.validatorResult(req);
    const hasErrors = !result.isEmpty();
    if (hasErrors) {
        const firstError = result.array()[0].msg;
        return res.status(400).json({
            errorMessage: firstError
        })
        /* console.log('hasErrors:', hasErrors);
        console.log('result:', result);*/
    }
    next();
}

前端应用程序中的请求文件:

import axios from "axios";

export const signup = async (data) => {
    const config = {
        headers: {
            'Content-type': 'application/json',
        }
    }
    const response = await axios.post('/api/auth/signup', data, config);
    return response;
}

我在后端的 package.json 上写了 "proxy":"http://localhost:8080"。当我启动 server.js 时,它只在终端上显示“正在侦听端口:8080”,仅此而已。我该如何回应?

标签: javascriptnode.jsexpresshttp

解决方案


递归

validatorResult函数被调用时,你要做的第一件事是:

const result = this.validatorResult(req);

...递归调用它。无限地。不要那样做。

没有反应

一旦你解决了这个问题, validatorResult将:

  • 返回 400 错误
  • 用于next()移交下一块中间件或端点

…但是没有下一个中间件或端点。

如果没有错误,您没有将发送响应的代码。

所以它永远坐在那里。


推荐阅读