You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:58