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

NodeJS returning JSON, but not to client properly

所以,我有一个根据用户名和密码输入对用户进行授权的路由。第一次验证检查,我似乎无法开始工作:

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 这个,我会得到适当的 JSON 响应,即 User could not be authenticated.

但是,如果我从我的客户端代码使用这条路由,并尝试 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);

            })

我查看了我以前完成的其他代码,通常这行得通,而且我通常可以访问消息并将其存储到状态:

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

想法?我错过了什么?

编辑...如果我让它做 res.json({ errorMsg: "message....."}) ...这很好用,但是 returns 一个 200 显然不是我想要的。

因此,当 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

            })