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

Node.js中调用OMDb API如何获取超过默认10条的返回结果?

解决方案

OMDb API本身默认单页最大仅返回10条结果,没有原生参数支持单次调用返回20条,最高效的实现方式是后端并发请求2页OMDb接口,合并结果后统一返回,整体耗时和单次请求接近,不会产生额外的串行等待开销。

代码优化点说明

  • 改用axios的params配置自动处理参数编码,避免搜索关键词含特殊字符时请求出错
  • 用Promise.all并发请求两页数据,性能最优
  • 新增错误捕获逻辑,避免接口异常直接崩溃
  • 去掉多余的JSON.parse(JSON.stringify)冗余操作,axios已自动解析接口返回的JSON数据

修改后代码

const axios = require('axios');

exports.getMovieFromApi = async (req, res) => {
  try {
    // 前端传入的1页对应OMDb的2页,比如前端page=1对应OMDb第1、2页,page=2对应OMDb第3、4页
    const basePage = req.query.page ? parseInt(req.query.page) : 1;
    const omdbPage1 = basePage * 2 - 1;
    const omdbPage2 = basePage * 2;

    // 并发请求两页数据,耗时和单次请求几乎一致
    const [res1, res2] = await Promise.all([
      axios.get('http://www.omdbapi.com/', {
        params: {
          apikey: process.env.API_KEY,
          s: req.query.s,
          page: omdbPage1
        }
      }),
      axios.get('http://www.omdbapi.com/', {
        params: {
          apikey: process.env.API_KEY,
          s: req.query.s,
          page: omdbPage2
        }
      })
    ]);

    // 合并两页搜索结果
    const mergedData = {
      ...res1.data,
      Search: [...(res1.data.Search || []), ...(res2.data.Search || [])]
    };

    res.status(200).json({
      data: mergedData
    });
  } catch (err) {
    res.status(500).json({
      error: '获取电影数据失败',
      message: err.message
    });
  }
};

注意事项

  • 如果搜索结果总条数不足20条,会自动返回所有可获取的结果,不会报错
  • 如果需要支持自定义返回条数,可以调整并发请求的页数即可,比如要30条就并发请求3页
  • 并发请求和串行请求消耗的OMDb接口配额一致,不会额外增加调用次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:05