为什么EJS模板中的数组显示长字母列表而不是完整结果?

时间:2018-02-18 06:27:17

标签: node.js express ejs

我想显示来自MongoDB的数组结果,但是我在使用EJS模板在前端显示它们时遇到问题。

这是我用来查询结果的代码:

app.get('/', function (req, res) {



    user.find({}, {twitter: 0, __v: 0, _id: 0}, function (err, result) {
        if (err) throw err; 

        //console.log(result); 

result.forEach(function(u) {
        u=JSON.parse(JSON.stringify(u))

 results = JSON.parse(JSON.stringify(u.meme.imgs)) 

        console.log(results);

     return res.render('pages/index', {

            path: results,
            state: req.session.state


        });   

});  



    });


});

console.log完全显示了我的数组结果,但是当我想要使用EJS在前端显示时,它给了我这个不必要的字母列表。

这是数组返回的结果:

"
h
t
t
p
:
/
/
l
o
c
a
l
h
o
s
t
/
p
u
b
l
i
c
/
I
m
a
g
e
s
/
o
k
r
o
.
j
p
g
"

这是在前端显示结果的代码:

<ul>
    <% for(var i=0; i<path.length; i++) { %>
        <li>

<%- path[i] %> 
        </li>
    <% } %>
</ul>

我做错了什么?请帮忙。

1 个答案:

答案 0 :(得分:0)

看起来你缺少结果声明,这使得结果变量成为全局变量,并且它的值可能是不可预测的,因为它可能被任何人改变,似乎发送给客户端的结果是字符串,并且你迭代字符串的字符并打印出来。尝试将let添加到结果声明中。

let results = ...

同样strinigfy你然后解析它,就像在你的例子中的两个地方所做的那样:

u=JSON.parse(JSON.stringify(u)) 
JSON.parse(JSON.stringify(u.meme.imgs))

将返回相同的对象,它没有效果,只会使代码混乱且可读性降低。