服务器状态400阻止json向客户端发送响应

时间:2019-09-21 11:33:40

标签: javascript reactjs express post axios

我目前正在为我的应用开发客户端。 当我尝试在电子邮件和密码正确的情况下登录用户时,一切正常,但由于status(400)阻止了发送错误数据,因此未发生错误消息。

这是我用于用户登录的服务器端代码的一部分,该代码未使用isAuth, message, err发送对象:

User.findOne({ email: req.body.email }, (err, user) => {
        if (!user) return res.status(400).json({
            isAuth: false,
            message: "Auth failed, bad email",
            err
        })

但是当我这样做的时候,我得到了所有参数的错误:

User.findOne({ email: req.body.email }, (err, user) => {
        if (!user) return res.json({
            isAuth: false,
            message: "Auth failed, bad email",
            err
        })

另一个奇怪的事情是,当我向邮递员发送错误的请求时,我正在获取所有响应数据。

这是发出请求的客户端函数,console.log(request)部分由于状态400而被阻止:

    const submitForm = async (e) => {
        e.preventDefault()
        const request = await axios.post('/api/login', { email: email, password: password }).then(res => res.data)
        console.log(request)

        dispatch({
            type: "USER_LOGIN",
            payload: request
        })
    }

这是来自控制台的一些Chrome内容:

xhr.js:166 POST http://localhost:3000/api/login 400 (Bad Request)
createError.js:17 Uncaught (in promise) Error: Request failed with status code 400
    at createError (createError.js:17)
    at settle (settle.js:19)
    at XMLHttpRequest.handleLoad (xhr.js:60)

1 个答案:

答案 0 :(得分:0)

出现了axios错误/错误。

我已使用fetch API重写了代码。似乎axios在处理4xx和5xx状态时存在某种错误。

现在客户端部分看起来像这样:

const submitForm = async (e) => {
        e.preventDefault()

        const request = await fetch('/api/login', {
            method: 'POST',
            body: JSON.stringify({ email, password }),
            headers: {
                'Content-Type': 'application/json',
            }
        }).then(res => res.json())

        console.log(request)

        dispatch({
            type: "USER_LOGIN",
            payload: request
        })
    }

在服务器端,一切都应按原样进行,return res.status(400).send(data)