问题描述
在egg中通过用户的code请求微信接口拿到openid,我发现第一次已经拿到,但是它执行了两次,所以ctx.body 直接打印了 第二次的结果, code已被使用。 如何修改只请求一次?
问题出现的环境背景及自己尝试过哪些方法
我尝试过使用 ctx.throw("500","xxxxx") 抛出错误,可以解决打印的问题(但它还是请求了两次),而且它不能设置200
相关代码
class User extends Controller {
async login() {
const ctx = this.ctx;
const result = await ctx.curl(
`https://api.weixin.qq.com/sns/jscode2session?appid=${
this.app.config.appid
}&secret=${this.app.config.secret}&js_code=${
ctx.query.code
}&grant_type=authorization_code`,
{
method: "GET",
dataType: "json",
headers: this.app.config.headers
}
)
console.log(result.data)
const openid = result.data.openid
if (openid) {
ctx.body = {
openid
}
} else {
ctx.throw(500, '获取openid失败');
}
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
只请求一次。
在判断后 return 即可