在选择数据上使用MySQL + Node.js + Jade的问题

时间:2014-02-15 10:07:04

标签: node.js express pug

错误

  

问题:无法读取未定义的属性“长度”   jade_debug.unshift.lineno(eval at   (C:\ Users \用户开发\ Node_js \ node_modules \玉\ lib中\ jade.js:160:8),   :111:31)在eval(eval at   (C:\ Users \用户开发\ Node_js \ node_modules \玉\ lib中\ jade.js:160:8),

数据库功能

exports.selectRows = function(){
    var objBD = BD();
    objBD.query('SELECT * FROM usr ', function(results) {
        return(results);

    });
}

路线

exports.index = function(req, res) {
    res.render('customer/index',{ customers: db.selectRows() });
};

index.jade

each item in customers
  tr
    td
      a(href='/customer/details/#{item.id}') #{item.id}
    td #{item.name}
    td #{item.email}
    td #{item.phone}

1 个答案:

答案 0 :(得分:1)

代码问题是selectRows方法是异步执行的,并且处理程序方法中的db.selectRows()表达式总是返回undefined值,因此execption(customers模板变量是undefined)。

您应该在代码中添加以下更改,以使其正常工作:

数据库功能

exports.selectRows = function(callback){
    var objBD = BD();
    objBD.query('SELECT * FROM usr ', callback);
}

<强>路线:

exports.index = function(req, res) {
    db.selectRows(function(results){
        res.render('customer/index', { customers: results });
    });
}

有时您可能会遇到callback获得两个参数的情况(非常常见的Node.js模式):

  • 首先是一个错误 - 如果数据库查询成功,它应该是undefined
  • 第二个是数据库查询结果数据

如果有两个参数(错误和结果),您的路线应如下所示:

exports.index = function(req, res) {
    db.selectRows(function(err, results){
        if (err) return res.send(500, "DB QUERY ERROR");
        res.render('customer/index', { customers: results });
    });
}

您还可以简化index.jade

each item in customers
  tr
    td: a(href='/customer/details/#{item.id}')= item.id
    td= item.name
    td= item.email
    td= item.phone

我希望这会有所帮助。