NodeJS返回JSON,但未正确返回客户端

时间:2019-01-25 21:22:17

标签: node.js reactjs express passport.js

因此,我有一条基于用户名和密码输入对用户进行身份验证的路由。第一次验证检查,我似乎无法上班:

exports.user_login = (req, res, next) => {
    passport.authenticate('local', { session: false }, (err, user, info) => {
        if (err || !user) {
            res.status(500).json({
                errorMsg: "User could not be authenticated."
            });
        }

如果我通过邮递员对其进行ping操作,我将得到一个与User could not be authenticated相匹配的JSON响应。

但是,如果我从客户端代码使用此路由,并尝试对其进行console.log或其他操作(本质上,我想提取任何errorMsg,请以状态登录,并将其反映给用户),那么我将得到以下响应:

axios.post("api/auth/login/", user)
            .then(res => {
                console.log(res);
                this.setState({
                    username: "",
                    password: ""
                })
                localStorage.setItem('bdgt', res.data.token);
            })
            .catch(err => {
                console.log(err);

            })

enter image description here

我看过我之前做过的其他代码,通常可以正常工作,而且我通常可以访问消息并通过以下方式将其存储为状态:

this.setState({
     error: err.errorMsg
})

有什么想法吗?我想念什么?

编辑...如果我只允许它res.json({ errorMsg: "message....."}) ...可以正常工作,但是返回一个200,这显然不是我想要的。

1 个答案:

答案 0 :(得分:1)

因此,当axios收到状态大于或等于400的响应时,将引发异常。您可以像这样

访问您的响应数据

axios.post("api/auth/login/", user)
            .then(res => {
                console.log(res);
                this.setState({
                    username: "",
                    password: ""
                })
                localStorage.setItem('bdgt', res.data.token);
            })
            .catch(err => {
                console.log(err.response.data); // this is your JSON

            })