Ced
Ced

Reputation: 1197

Jade won't show results of mysql

I'm using node.js, express, jade and mysql.

\\app.js
var db_config = {
host: 'localhost',
port: '3306',
[redacted]
};
var connection = mysql.createConnection(db_config);
...
app.get('/events', routes.events(connection));  


\\index.js
exports.events = function (db) {
return function (req, res) {

    db.connect(function (err) {
        if (err) {
            console.log('error\'d:', err);
        }
    });

    db.query('SELECT name FROM event', function (err, rows, fields) {
        if (err) throw err;
        else {
            console.log(rows);
            res.render('events', { "items": rows });
        }
    });
}  


\\events.jade
extends layout

block content
    h1.
        Events List
    ul
    - each event in items
        li = event

When I run this, the console shows the results of the query, but jade seems to refuse to go over it. All the tutorials I can find seem to have near identical code to mine. I was previously getting an error:

5|         Events List
6|     ul
> 7|     - each event in items
8|             li event.name
Cannot read property 'length' of undefined

but can't remember what I was doing when that popped up.

Currently console outputs:

Express server listening on port 3000
[ { name: 'Test event' },
{ name: 'Test event 2' },
{ name: 'Test event 3' },
{ name: 'Woooh event' } ]
GET /events 200 364ms - 151b
GET /stylesheets/style.css 304 4ms

Can anyone spot what I'm doing wrong?

Upvotes: 2

Views: 808

Answers (3)

Ced
Ced

Reputation: 1197

Got it sorted with some help

li #{event.name} and
res.render('events', { "items": rows }); instead of
res.render('events', { "items": JSON.stringify(rows) });

Upvotes: 1

arto
arto

Reputation: 11

Try without '-' and use global variable locals:

    each event in locals.items

Upvotes: 1

jmingov
jmingov

Reputation: 14003

check JSON.stringify();

try:

else {
    console.log(rows);
    res.render('events', { "items": JSON.stringify(rows)});
    }

Upvotes: 0

Related Questions