request.js中Bearer认证失效求助:请求Heroku API返回404
问题:request库Bearer认证请求Heroku API返回404,Postman却正常工作?
我在使用request库时遇到了一个棘手的问题:尝试向Heroku发送请求获取dyno信息时,明明配置了正确的Bearer认证信息,却始终返回404错误。我试了两种配置方式都不行,但用Postman设置相同的Authorization头却能正常执行GET和DELETE请求。
我的两种实现代码如下:
尝试的代码
OPTION 1: 手动设置Authorization头
var options = { url: `https://api.heroku.com/apps/${process.env.HEROKU_APP_NAME}/dynos, method: 'GET', headers: { 'Accept': 'application/vnd.heroku+json; version=3', 'Authorization': `Bearer ${process.env.HEROKU_AUTH_TOKEN}`, 'Content-Type': 'application/json' } };
OPTION 2: 使用request的auth配置项
var options = { url: `https://api.heroku.com/apps/${process.env.HEROKU_APP_NAME}/dynos, method: 'GET', auth: { bearer: process.env.HEROKU_AUTH_TOKEN }, headers: { 'Accept': 'application/vnd.heroku+json; version=3', 'Content-Type': 'application/json' } };
我还尝试了另一个合法的API路径并使用DELETE方法,同样返回404。恳请大家帮忙分析问题所在,谢谢!
解决思路
我一眼就注意到你代码里的一个致命语法错误,这很可能是导致404的核心原因:
1. 修复URL模板字符串的闭合问题
你的两个options对象里,url字段的模板字符串都没有正确闭合——结尾缺少了一个反引号(`)!这会导致request请求的是一个格式错误的URL,Heroku的API自然无法识别这个无效端点,所以返回404。
修正后的代码如下:
修正后的OPTION 1
var options = { url: `https://api.heroku.com/apps/${process.env.HEROKU_APP_NAME}/dynos`, method: 'GET', headers: { 'Accept': 'application/vnd.heroku+json; version=3', 'Authorization': `Bearer ${process.env.HEROKU_AUTH_TOKEN}`, 'Content-Type': 'application/json' } };
修正后的OPTION 2
var options = { url: `https://api.heroku.com/apps/${process.env.HEROKU_APP_NAME}/dynos`, method: 'GET', auth: { bearer: process.env.HEROKU_AUTH_TOKEN }, headers: { 'Accept': 'application/vnd.heroku+json; version=3', 'Content-Type': 'application/json' } };
2. 验证环境变量是否正确加载
即使修复了语法问题,也建议先确认你的环境变量是否正确读取:
// 在请求前添加日志,确认变量值 console.log('Heroku App Name:', process.env.HEROKU_APP_NAME); console.log('Heroku Auth Token:', process.env.HEROKU_AUTH_TOKEN);
如果变量值为空或者不正确,也会导致请求的URL无效(比如app名称错误),进而返回404。
3. 检查request库版本(可选)
request库已经处于维护状态(deprecated),如果你的版本非常老旧,可能存在Bearer认证的兼容性问题。可以尝试升级到最新的可用版本,或者考虑迁移到更活跃的库(比如axios、node-fetch),不过这一步应该是在前面的问题都排除后再考虑。
按照上面的步骤修正后,你的请求应该就能和Postman一样正常工作了!
内容的提问来源于stack exchange,提问作者Petr Gazarov
相关产品推荐
相关产品推荐

