首页 > 解决方案 > 使用 axios 从 api 获取返回的问题

问题描述

我试图从我的 api 获取带有 jsonwebtoken 的令牌到我的反应组件,但我无法从客户端获取它,但是我猜服务器端的一切似乎都正常。

接口:

router.post("/api/user/login", async (ctx, next) => {
  var nickname = ctx.request.body.data.nickname;
  var password = ctx.request.body.data.password;
  var user = await db.collection("tmp_users").find({nickname: nickname}).toArray();
  var token = "";

  if (user.length > 0) {
    const hashPassword = user[0].password;
    bcrypt.compare(password, hashPassword)
    .then((res) => {
      if (res) {
        jwt.sign({ user: user}, "test", (err, res) => {
          console.log("token GOOD => ", res);
          ctx.body = res;
          return res;
        });
      }
    });
  }
  console.log("token FAILED => ", token);
  ctx.body = token;
  return token;
});

这里有 axios 的客户端部分:

axios.post("/api/user/login", { data })
.then(res => {
  console.log("res =>", res);
  console.log("res data =>", res.data);
  console.log("res token => ", res.token);
  console.log("res data token =>", res.data.token);
});

问题是:我在哪里可以找到令牌?在服务器端,日志控制台是好的。但是客户端我迷路了,我找不到它。

也许我没有得到什么?感谢帮助 !

标签: reactjsjwtaxios

解决方案


它没有返回任何值,因为您返回的是异步的内部承诺。我已经编写了库(bcrypt/jwt)为同步操作提供的替代方法。

router.post("/api/user/login", async (ctx, next) => {
  var nickname = ctx.request.body.data.nickname;
  var password = ctx.request.body.data.password;
  var user = await db.collection("tmp_users").find({nickname: nickname}).toArray();
  var token = "";
  if (user.length > 0) {
    const hashPassword = user[0].password;
    const res = await bcrypt.compare(password, hashPassword);
    if (res) {
      const jwttoken = await jwt.sign({ user: user}, "test")
      console.log("token GOOD => ", jwttoken);
      ctx.body = jwttoken;
      return jwttoken;
    }
  }
  return new Error("Error");
});

推荐阅读