reactjs - 使用 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);
});
问题是:我在哪里可以找到令牌?在服务器端,日志控制台是好的。但是客户端我迷路了,我找不到它。
也许我没有得到什么?感谢帮助 !
解决方案
它没有返回任何值,因为您返回的是异步的内部承诺。我已经编写了库(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");
});
推荐阅读
- xamarin.forms - Xamarin.Forms 如何将代码中的数据绑定到滑动视图(在 xaml 中工作)
- javascript - 防止后处理程序最小化应用程序
- pytorch - 调整大小与 CenterCrop 与 RandomResizedCrop 与 RandomCrop
- tkinter - 如何在tkinter中调整框架内列表框的高度
- c# - JObject.ToObject 覆盖属性我该如何合并?
- c# - WPF 布局上的 Trello 板
- if-statement - 电子表格脚本,匹配通配符和不同大小写
- text - python IDLE可以用来创建play store应用吗
- angular - 无法在角度单击按钮时显示数据
- java - 保留端口插件与新的 ServerSocket(0) 进行测试