I am using hbs as view in frontend. I tried to send data to my script in html from nodejs like this :
JavaScript
x
25
25
1
router.get('/home',authController.isLoggedIn, (req ,res) => {
2
if(req.user){
3
db.query('SELECT * FROM posts ORDER BY id desc ', (error,results) => {
4
if (error) {
5
console.log(error);
6
} else {
7
let categories;
8
db.query('SELECT * FROM categories', (error,result) => {
9
if (error) {
10
console.log(error);
11
} else {
12
console.log(result);
13
categories = result;
14
return res.render('home',{
15
results: results,
16
categories: categories
17
});
18
}
19
});
20
}
21
});
22
}else {
23
res.redirect('/login');
24
}
25
});
then when i am trying to call it here in script using javaScript it tells me something is wrong
JavaScript
1
4
1
<script>
2
alert(results);
3
</script>
4
I want to know how correctly call the the object in script
edit:
the data should be something like this :
JavaScript
1
6
1
[
2
RowDataPacket { id: 1, category: 'Music' },
3
RowDataPacket { id: 2, category: 'Memes' },
4
RowDataPacket { id: 3, category: 'Tech' }
5
]
6
Advertisement
Answer
For EJS example if pass data msgs
:
JavaScript
1
4
1
res.render("index.ejs", {
2
msgs
3
})
4
- js handle data:
JavaScript
1
8
1
<p>
2
<%
3
msgs = msgs.map(function(msg) {
4
return '<div>' + msg.name + '</div>' + '<div>' + msg.msg + '</div>'+ '<div>' + msg.time + '</div>'
5
})
6
%>
7
</p>
8
- print directly:
JavaScript
1
2
1
<p><%- msgs.join("<hr />") %></p>
2
- save in global variable
JavaScript
1
4
1
<script>
2
window.serverMsgs = <%- msgs %>;
3
</script>
4
And for handlebars:
JavaScript
1
15
15
1
<script>
2
window.serverMsgs = {{msgs}};
3
alert(window.serverMsgs)
4
5
6
{{#each results}}
7
{
8
"id": {{id}},
9
"category": "{{category}}",
10
}
11
{{#unless @last}},{{/unless}}
12
{{/each}}
13
14
</script>
15
JavaScript
1
17
17
1
<!doctype html>
2
<html>
3
<head>
4
<meta charset="UTF-8">
5
<title>{{title}} - Page Test</title>
6
</head>
7
<body>
8
<div class="description">{{description}}</div>
9
<ul>
10
{{#datas}}
11
<li class="item" id="item_{{index}}"><span>{{time}}</span><a href="{{url}}" class="art">{{title}}</a></li>
12
{{/datas}}
13
</ul>
14
15
</body>
16
</html>
17
u could check out this similar issue:) How to define an array within a <script> tag inside a hbs view template