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

如何在Express.js服务器上实现edX API的JWT认证请求?

把edX API的curl请求转为Express.js实现的方法

嘿,作为后端新手碰到这种curl转代码的问题太正常啦!我来帮你一步步拆解并实现这个请求,刚好你之前用过request-promise,那先从你熟悉的工具入手,再给你推荐现在更主流的替代方案~

用你熟悉的request-promise实现

首先,确保你已经安装了依赖(如果之前没装全的话):

npm install request request-promise

然后在你的Express路由里,可以这么写:

const express = require('express');
const router = express.Router();
const rp = require('request-promise');

// 实际项目里别硬编码令牌,建议存在环境变量里更安全
const EDX_ACCESS_TOKEN = '你的JWT令牌';

router.get('/edx-courses', async (req, res) => {
  try {
    // 对应curl请求的参数配置
    const options = {
      method: 'GET',
      uri: 'https://api.edx.org/catalog/v1/catalogs/',
      headers: {
        'Authorization': `JWT ${EDX_ACCESS_TOKEN}`
      },
      json: true // 自动把响应解析成JSON格式
    };

    // 发送请求并返回数据给前端
    const courseData = await rp(options);
    res.status(200).json(courseData);
  } catch (error) {
    // 处理请求出错的情况
    console.error('调用edX API失败:', error);
    res.status(error.statusCode || 500).json({
      message: '获取课程信息失败',
      error: error.message
    });
  }
});

module.exports = router;

这里把curl的各个部分对应到了request-promise的配置项:

  • -X GET → 对应method: 'GET'
  • -H "Authorization: JWT {access token}" → 对应headers里的Authorization字段
  • 请求URL → 对应uri字段
  • json: true可以帮你省去手动解析JSON响应的步骤

更推荐的替代方案:axios(request系列已停止维护)

request和request-promise已经不再维护了,现在业内更常用axios这种活跃的HTTP客户端,用法也很简洁:

先安装axios:

npm install axios

实现代码如下:

const express = require('express');
const router = express.Router();
const axios = require('axios');

const EDX_ACCESS_TOKEN = '你的JWT令牌';

router.get('/edx-courses', async (req, res) => {
  try {
    const response = await axios.get('https://api.edx.org/catalog/v1/catalogs/', {
      headers: {
        'Authorization': `JWT ${EDX_ACCESS_TOKEN}`
      }
    });

    res.status(200).json(response.data);
  } catch (error) {
    console.error('调用edX API失败:', error);
    res.status(error.response?.status || 500).json({
      message: '获取课程信息失败',
      error: error.message
    });
  }
});

module.exports = router;

几个实用小提醒

  • 安全第一:绝对不要把access token硬写在代码里,用dotenv包加载环境变量(比如process.env.EDX_ACCESS_TOKEN)才是正确做法。
  • 错误处理要全面:除了捕获请求异常,还要考虑令牌过期、API限流等特殊场景的处理。
  • 可选优化:如果需要频繁调用这个API,可以加个缓存机制,避免重复请求浪费资源。

内容的提问来源于stack exchange,提问作者Jbbae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:40:02