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

Node.js+EJS报错:datos未定义,无法传递YouTube视频信息

解决「datos is not defined」错误

问题原因

用户通过GET请求访问首页(/)时,res.render("index")未传递datos变量,但index.ejs模板直接尝试访问datos的属性(如datos.thumbnails[0].url),触发未定义错误。同时模板中<h1>标签错误使用了href和target属性(这两个属性仅属于<a>标签),属于无效写法。

解决方案

1. 首页GET请求传递初始空值

修改app.js中的GET路由,给datos传递空初始值:

app.get("/",(req,res)=> {
    res.render("index", {datos: null})
})

2. EJS模板添加条件渲染逻辑

在index.ejs中,仅当datos存在时才渲染视频信息,同时修正标签属性错误:

<input type="search" name="url" placeholder="Yourube URL" class="url-input">
<button class="convertir">CLICK ME</button>
<% if (datos) { %>
    <img src="<%=datos.thumbnails[0].url%>" alt="视频缩略图" class="miniatura">
    <a href="<%=datos.url%>" target="_blank" class="titulo-video">
        <span><%=datos.title%></span>
    </a>
<% } %>

3. 优化POST请求的变量定义(可选)

原代码中options = { detailedChannelData: true }属于全局变量赋值,改为局部变量避免潜在问题:

app.post("/convert",(req,res) => {
    var url = req.body.url
    var options = { detailedChannelData: true };
    var data = youtubeinfo.videoInfo(url, options)
    console.log(data)
    
    data.then(data => {
        console.log("=== VIDEO INFO ===")
        console.log(data)
        res.render("index", {datos:data})
    }).catch(err => {
        console.log("=== ERROR ===")
        console.log(err)
        console.log("error")
        res.render("error")
    })
})

验证逻辑

  • 首次访问首页:datos为null,模板不渲染缩略图和标题,避免报错
  • 提交表单触发POST请求:获取到视频数据后,datos被赋值,模板正常渲染视频信息
  • 修正后的<a>标签可正常跳转至原视频链接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:34