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
相关产品推荐
相关产品推荐

