2013-11-03 46 views
2

我正在使用node.js,express,jade和mysql。Jade不会显示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 

当我运行这个,控制台显示查询的结果,但玉似乎拒绝超过它。 我可以找到的所有教程似乎都有与我的代码几乎相同的代码。 我以前收到一个错误:

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

,但不记得我在做什么时弹出。

目前控制台输出:

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 

任何人能发现我在做什么错?

+0

控制台显示'rows'作为一个数组作为调用索引功能的一部分吗? – WiredPrairie

+0

请添加确切的console.log结果。行可能会以数组的形式返回,而这些数组无法用作项键的值。 – dankohn

+0

您至少需要使用'li = event.name'来扩展event.name',但这可能不是您的问题。你是不是在某处覆盖'物品'? – robertklep

回答

1

得到它整理一些帮助

li #{event.name}
res.render('events', { "items": rows }); 而不是
res.render('events', { "items": JSON.stringify(rows) });

0

检查JSON.stringify();

尝试:

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

感谢您的建议,但它没有工作 – Ced

1

尝试没有 ' - ',并使用全局变量当地人:

each event in locals.items 
+0

这也没有工作 – Ced