【问题标题】:POST request is keeping pending,but never gives responsePOST 请求保持等待状态,但从未给出响应
【发布时间】:2021-01-22 02:24:57
【问题描述】:

我的 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;

validator.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”,仅此而已。我该如何回应?

【问题讨论】:

  • this.validatorResult(req); 这不是会使调用递归吗?
  • @souravsatyam 感谢您的回答。我导入了“validationResult”函数并将这部分代码编辑为“validationResult(req)”。调用仍然是递归的。
  • exports.validatorResult 将 validatorResult 方法更改为其他方法,例如仅说 validator

标签: javascript node.js express http


【解决方案1】:

更改 server.js

app.use(cors);

app.use(cors());

这将修复响应;)

【讨论】:

    【解决方案2】:

    递归

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

    const result = this.validatorResult(req);
    

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

    没有回应

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

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

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

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

    所以它永远坐在那里。

    【讨论】:

    • 我编辑了我的 validator.js 文件。我这样编辑它:const { check,validationResult } = require('express-validator'); const result = validationResult(req);。其他保持不变。我犯了错误并尝试发送请求。但它只是再次等待。我该如何预防呢?
    【解决方案3】:

    validatorResult()next() 结束。但是接下来没有中间件了。仅有的两个是signupValidator、validatorResult……就是这样。所以,最后,您必须使用res.end()res.json(....) 或其他res.something 方法回复浏览器。

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多