当前位置: 首页 > 知识库问答 >
问题:

使用Axios时出错,但在Postman中正确响应

缑修齐
2023-03-14

我在后端使用Axios时遇到了问题。这可能是一个非常简单的修复,因为我是新手。

邮递员:对于有效和无效的凭据都收到正确的响应。

axios:对于有效的crendentials会收到正确的响应,但是当输入无效的凭据时,axios方法的catch块会运行。

exports.login = (req, res, next) => {
    const email = req.body.email;
    const pass = req.body.password;
    let loadedUser;

    User.findOne({ where: { email: email } })
        .then(user => {
            if(!user) {
                const error = new Error('Incorrect username or password');
                error.statusCode = 401;
                throw error;
            } else {
                loadedUser = user;
                return bcrypt.compare(pass, user.password);
            }
        })
        .then(isEqual => {
            if(!isEqual) {
                const error = new Error('Incorrect username or password');
                error.statusCode = 401;
                throw error;
            } else {
                const token = jwt.sign(
                    {
                        email: loadedUser.email,
                        userId: loadedUser.id
                    }, 
                    process.env.JWT_SECRET,
                    { expiresIn: '1hr' }
                );
                res.status(200).json({ token: token, userId: loadedUser.id });
            }
        })
        .catch(err => {
            if (!err.statusCode)
                err.statusCode = 500;
            next(err);
        });

};
app.use((error, req, res, next) => {
    const status = error.statusCode || 500;
    const message = error.message;
    const data = error.data || 'No Data';

    console.log(status, message, data);

    res.status(status).json({message: message, data: data});
});
login(email, password) {
    const headers = {
        'Content-Type': 'application/json'
      };

      const data = JSON.stringify({
        email: email,
        password: password
      });

      axios.post('http://127.0.0.1:8080/auth/login', data, { headers })
          .then(res => console.log(res))
          .catch(err => console.log(err));

}

共有1个答案

童子明
2023-03-14

实际上,您的代码运行良好,但如果您的状态为401,则Axios将拒绝调用的promise。如果你的状态在200到300之间,它将解决promise。

有两种方法来处理这个问题。

检查catch块中的状态。

axios.post('http://127.0.0.1:8080/auth/login', data, {
    headers
  })
  .then(res => console.log(res))
  .catch(err => {
    if (err.response.status === 401) {
      //Auth failed
      //Call reentry function
      return;
    }
    return console.log(err)
  });
axios.post('http://127.0.0.1:8080/auth/login', data, {
    headers,
    validateStatus: function (status) {
       return status >= 200 && status < 300 || (status === 401);
    },
  })
  .then(res => console.log(res))
  .catch(err => return console.log(err));
 类似资料:
  • 我正在尝试使用JWT保护我的nodejs、express和react应用程序中的post路由。我使用postman将JWT令牌添加到头中进行了测试,可以完美地将用户添加到数据库中。但是如果我使用axios执行react的请求,我会得到401响应(未经授权)。 这是来自前端的我的axios post请求: 以下是我的邮寄路线: 这是我的中间件: 那么,我如何才能正确地提出axios请求?提前谢谢。

  • 我已经使用Django和Django rest框架设置了一个APIendpoint,以使用POST请求提交表单。当使用PostMan发送请求时,后端工作正常,并将数据添加到数据库中。但是,当我使用fetch时,后端返回。前端是一个react网页包设置。 这是我用来发出请求的代码: 下面是的打印: 我还使用wireshark捕获PostMan和获取请求。这是邮递员的请求,成功的响应: 然而,这是带有

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 问题内容: 我通过jQuery AJAX将一些数据发布到PHP脚本中,并且一切正常执行,但是返回了404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不了解该脚本如何响应,它仍然会引发404错误。jQuery的“错误”回调方法将触发,而“成功”方法则不会触发。 PHP脚本执行的所有语句都能正常工作,因为我可以看到数据库正在更新等。 我在Dreamhost托管的WordPress

  • 我正在编写一个Rest客户端来发布JSON数据使用Spring RestTem板。使用POSTMAN和下面的JSON数据在体内得到正确的响应- 但是,当尝试使用SpringRESTTemplate访问RESTAPI时,如下所示 我有个例外- 我会感谢你的帮助。

  • 向带有某些头的endpoint发出邮递员请求 当我运行下面的代码时 它返回了我所期望的一切,如下所示 问题只出在Axios请求上,而不是其他任何事情。这里面出了什么问题?