如何用Node.js获取Client Credentials类型的access_token?
你的Node.js获取access_token代码问题修正
你的代码里存在几处语法和逻辑错误,我帮你逐一修正并说明:
问题点梳理
- 函数名拼写错误:
genrateAccessToken少了字母e,应该改为generateAccessToken - axios请求语法错误:
axios.post的URL和配置对象之间缺了逗号;axios里用data字段传请求体(不是body),请求头字段是headers(复数,不是header) grant_type值未加引号:client_credentials是字符串常量,必须用引号包裹,否则会被当作变量导致报错- 未等待axios请求完成:async函数里调用axios.post必须加
await,不然会直接返回空Promise,拿不到响应数据 response变量未定义:需要接收axios返回的响应对象才能获取data- 控制台日志缺失端口号:
app.listen里的输出没写具体端口 - 缺少错误处理:请求可能失败,需要捕获异常避免程序崩溃
修正后的完整代码
const express = require("express"); const axios = require("axios"); const app = express(); app.get("/test", async (req, res) => { try { const data = await generateAccessToken(); console.log(data); res.json(data); } catch (error) { console.error("获取access_token失败:", error.message); res.status(500).json({ error: "获取令牌失败" }); } }); async function generateAccessToken() { const response = await axios.post( "https://authentification-candidat.pole-emploi.fr/connexion/oauth2/access_token", { grant_type: "client_credentials", client_id: '你的Client_ID', client_secret: '你的Client_Secret', scope: 'api_labonneboitev1' }, { headers: { 'Content-Type': "application/x-www-form-urlencoded" } } ); return response.data; } app.listen(5000, () => { console.log(`App listening on port 5000`) });
额外说明
因为接口要求Content-Type为application/x-www-form-urlencoded,axios会自动把对象格式的请求体转换成表单格式提交,无需手动处理。如果后续遇到提交格式问题,也可以用qs.stringify()手动序列化数据,但默认处理基本能满足需求。
内容的提问来源于stack exchange,提问作者Thestrike95
相关产品推荐
相关产品推荐

