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

如何在Node.js+OMDB API中搜索无效电影时显示错误

解决OMDB API电影搜索应用的无效搜索错误问题

我明白你碰到的问题了——当用户搜索不存在或拼写错误的电影时,OMDB API返回的结果里没有Search字段,这直接导致你的results.ejs模板在尝试调用data["Search"].forEach()时抛出TypeError,因为data["Search"]是undefined。下面是完整的解决方案:

第一步:完善后端的API响应判断逻辑

先修改app.js里的/results路由,不仅要处理请求层面的网络错误,还要校验API返回的业务结果:

var express = require('express');
var app = express();
var request = require('request');
var _und = require('underscore');

app.set("view engine", "ejs");

// Search Route
app.get("/", function(req, res) {
  res.render("search", { warning: null }); // 初始化warning为null,避免模板报错
});

// Result Route
app.get("/results", function(req, res) {
  var query = req.query.search;
  var url = "http://www.omdbapi.com/?apikey=6cf73f27&s=" + query;

  request(url, function(error, response, body) {
    // 处理请求层面的错误(比如网络故障、API服务器无响应)
    if(error || response.statusCode !== 200) {
      return res.render("search", { warning: "无法连接到电影数据库,请稍后重试" });
    }

    var data = JSON.parse(body);
    
    // 处理业务层面的错误:API返回Error字段,或Search不存在/为空数组
    if(data.Error || !data.Search || data.Search.length === 0) {
      return res.render("search", { warning: "未找到匹配的电影,请检查拼写后重试" });
    }

    // 有效搜索结果,渲染results页面
    res.render("results", { data: data });
  });
});

app.listen(9090, function() {
  console.log("Movie App has started!!!.....Ctrl+C to Exit.....");
});

第二步:在搜索页面添加错误提示展示

修改你的搜索页面模板(search.ejs),添加代码来显示后端传递的警告信息:

<h1>电影搜索</h1>
<!-- 错误提示区域 -->
<% if (warning) { %>
  <div style="color: #dc3545; padding: 10px; background-color: #f8d7da; border-radius: 4px; margin-bottom: 15px;">
    <%= warning %>
  </div>
<% } %>

<form action="/results" method="GET">
  <input type="text" name="search" placeholder="输入电影名称..." required>
  <button type="submit">搜索</button>
</form>

第三步:给结果模板添加兜底判断(可选但推荐)

为了避免后续再出现类似的未定义错误,你可以在results.ejs里添加一个兜底判断,确保data.Search存在时才执行遍历:

<h1>Result:</h1>
<% if (data.Search && data.Search.length > 0) { %>
  <ul>
    <% data["Search"].forEach(function(movie) { %>
      <li><strong><%= movie["Title"] %></strong> - <%= movie["Year"]%></li>
    <% }) %>
  </ul>
<% } else { %>
  <p>未找到任何匹配的电影</p>
<% } %>
<a href="/">Search again!</a>

这样修改后,当用户搜索无效电影时,会直接跳转回搜索页面并显示清晰的错误提示,再也不会抛出TypeError了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:40:33