ejs for循环只提供href链接中的第一个元素

时间:2018-05-19 16:09:06

标签: node.js express ejs

我的home.ejs文件中有一个for循环,如下所示。当我从app.js文件中访问req.params.name并将其发送到watch_movie.ejs时,只发送第一个索引元素。为什么我无法访问其他索引。

home.ejs文件:

<%data.forEach((item)=>{%>
     <li>
        <a href="watch_movie/:<%=item.Name%>"><img src="<%=item.Image_path%>" height=200px width=150px alt="<%=item.Name%>"></a>                  
        <p><%=item.Name%></p>
    </li>
<%});%>

watch_movie.ejs文件:

<video width="780px" height="450px" controls>
   <source src="<%=path.Video_path%>"><!-getting video_path of only first elemnt ->
        your website doesn't support video
</video>

app.js文件:

app.get('/', (req, res) => {
   const sql = 'select * from Movies';
   db.query(sql, (err, result) => {
       if (err)
           throw err;
       else {
           const s_res = JSON.stringify(result);
           const j_res = JSON.parse(s_res);
           // const image_data = j_res[0].name;
           res.render('home.ejs', { data: j_res });
       }
   });
});



app.get('/watch_movie/:name', (req, res) => {
   const name = req.params.name;
   const sql = "select * from Movies where Name=name";
   db.query(sql, (err, result) => {
       if (err)
           throw err;
       else {
           const s_res = JSON.stringify(result);
           const j_res = JSON.parse(s_res);
           const movie = j_res[0];
           console.log(movie);//it consoles proper element
           res.render('watch_movie', { path: movie });
       }
   });
});

1 个答案:

答案 0 :(得分:0)

您的SQL存在问题,请注意您写道:Name = name。 既然SQL不区分大小写,它基本上等同于name = name,所以你要将name的值与它的self进行比较,它总是TRUE。 之后,您从结果中获取第一个值:const movie = j_res[0];,这就是您始终获得第一行的原因。

简单的解决方案(不推荐)是改变  这样:

const sql = "select * from Movies where Name=name";

对此:

const sql = "SELECT * FROM movies WHERE name="+name;

这应该有用,但直接连接值 - 有SQL injection漏洞,这是一个很大的风险。

所以我建议你做的是将prepared statement与参数化值一起使用。

像这样:

const name = req.params.name;
const sql = "SELECT * FROM movies WHERE name = ?";
const paramValues = [name];
db.query(sql, paramValues, (err, result) => {
   //Your code...
});