[英]How to get the json response back in the front end that I am sending from my backend?
[英]How can I wait for my "request" and response back to front end?
我现在正在研究 Zoom API。 我想将我的令牌从 ZOOM API 发送到前端作为响应。 但是,“来自请求的令牌”始终首先打印且未定义! 然后来自 Zoon API 的令牌”将跟随令牌。我怎样才能做到这一点?谢谢!
const Newrequest = require("request");
class ZoomController {
async getInvLink({ request, response }) {
const instructor_id = params.id;
try {
let tokenRes;
const code = request.all().code;
console.log("the code from frontend is ", code);
const client_id = _something_
const client_secret = _something_
var options = {
method: "POST",
url: "https://api.zoom.us/oauth/token",
qs: {
grant_type: "authorization_code",
code: code,
redirect_uri: _something_
},
headers: {
Authorization:
"Basic " +
Buffer.from(client_id + ":" + client_secret).toString("base64")
}
};
await Newrequest(options, function(error, res, body) {
if (error) throw new Error(error);
tokenRes = JSON.parse(body);
console.log("token from Zoon API",tokenRes);
});
console.log("token from request",tokenRes);
return response.status(200).send(tokenRes);
} catch (error) {
console.log(error);
return response.status(401).send();
}
我不知道这个 api 是什么,但我将做出有根据的猜测, Newrequest
不会返回承诺。 所以等待它实际上并不是你想要做的。
但是,您可以做的是使用一些简单的代码将其转换为承诺:
const tokenRes = await new Promise((resolve, reject) => {
Newrequest(options, function(error, res, body) {
if (error) reject(error);
tokenRes = JSON.parse(body);
console.log("token from Zoon API",tokenRes);
resolve(tokenRes);
});
})
你必须要听的东西端点,您将收到的代码在那边。 这是您可以发送以交换访问令牌的代码。
请参阅此链接: https : //www.npmjs.com/package/request#promises--asyncawait
util.promisify()
将需要回调的常规函数转换为返回承诺例子 :
Newrequest(options, function(error, res, body) {
if (error) throw new Error(error);
tokenRes = JSON.parse(body);
console.log("token from Zoon API",tokenRes);
});
// to
const util = require('util');
const req = util.promisify(Newrequest)
const data = await req(options)
// ...
这是一个示例代码。 请适应您的需求
有用的课程: https : //masteringjs.io/tutorials/node/promisify
使用另一个库会很有趣。
备择方案 :
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.