-2

我现在正在研究 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();
}
4

3 回答 3

0

您将不得不在某处收听端点,将在那里收到代码。这是您可以发送以交换访问令牌的代码。

于 2020-09-23T15:45:49.840 回答
0

我不知道这个 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);
    });
})
于 2020-09-23T14:23:22.427 回答
0

请查阅此链接: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

请求库已弃用

使用另一个库会很有趣。

备择方案 :

于 2020-09-24T08:15:31.110 回答