访问 Node.JS Post Request 的响应
Posted
技术标签:
【中文标题】访问 Node.JS Post Request 的响应【英文标题】:Access the response of Node.JS Post Request 【发布时间】:2022-01-12 18:01:11 【问题描述】:我正在尝试围绕 Spotify API 的客户端凭据流程,在他们的文档中,他们有这种方式来获取访问令牌:
var client_id = 'CLIENT_ID';
var client_secret = 'CLIENT_SECRET';
const authOptions =
url: "https://accounts.spotify.com/api/token",
headers:
"Authorization":
"Basic " +
new Buffer.from(clientID + ":" + clientSecret).toString("base64"),
"Content-Type": "application/x-www-form-urlencoded",
,
form:
grant_type: "client_credentials",
,
json: true,
;
request.post(authOptions, function(error, response, body)
if (!error && response.statusCode === 200)
var token = body.access_token;
);
现在我正在尝试获取 token
并在 API 调用中导出或使用它,但无论我做什么,我都无法访问该语句。
将 POST 放入变量或函数并调用它会导致 undefined
。
这就是我想要实现的目标:
import authOptions from "./credentials.js";
import pkg from "request";
const post = pkg;
const Spotify =
getAccessToken()
post(authOptions, function (error, response, body)
if (!error && response.statusCode === 200)
const token = body.access_token;
return token;
);
,
async search(input)
const accessToken = Spotify.getAccessToken();
const response = await fetch(
`https://api.spotify.com/v1/search?q=$input&type=artist`,
headers:
"Authorization": `Bearer $accessToken`,
"Content-Type": "application/json",
,
);
const data = await response.json();
console.log(data);
,
;
export default Spotify;
当然,该发布请求没有返回访问令牌。
有什么办法可以将那段代码转换成Async/Await
?
【问题讨论】:
您可以编写自己的 Promise,也可以使用 Node 的 util.promisify nodejs.org/api/util.html#utilpromisifyoriginal 或在 npm 上使用 3rd 方库... 【参考方案1】:你可以创建一个新的承诺:
async function getAccessToken()
return new Promise((resolve, reject) =>
post(authOptions, function (error, response, body)
if(error)
reject(error);
else if (response.statusCode === 200)
const token = body.access_token;
resolve(token);
);
);
;
resolve/reject 允许您在调用回调时返回该值,并将错误传递给调用者进行处理。您可以使用这种格式来promisify 任何基于回调的函数,方法是在promise 中调用它并使用resolve/reject 返回值。
【讨论】:
这样做会返回 Promise 对象,而不是解析后的值 我不得不等待这个函数对另一个函数的响应才能从中获取访问令牌。非常感谢您的帮助!以上是关于访问 Node.JS Post Request 的响应的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Node.js res.body 中获取 $http.post 请求数据
来自 Google Cloud Functions Node.js 的 HTTP POST?