通过NodeJS和Express检索MySQL查询的所有内容到Jade模板引擎

时间:2011-08-02 16:02:15

标签: mysql node.js express

简单的新手问题,我开始使用nodejs,而且我对一般的后端语言也很陌生。

我设法使用express-js中的默认jade引擎将数据库中的单个字段发布到网页。

/**
 * Module dependencies.
 */

var express = require('express');

var app = module.exports = express.createServer();
var sqlResult;
//MySql
var mysqlClient = require('mysql').Client,
    newClient = new mysqlClient(),
    Database = 'test',
    Table = 'test_table';

    newClient.user ='root';
    newClient.password='password';
    newClient.connect(console.log('connected to the database.'));
    newClient.query('USE '+Database);
    newClient.query(
  'SELECT * FROM '+Table,
  function selectCb(err, results, fields) {
    if (err) {
      throw err;
    }
    sqlResult = results[0];
    console.log(sqlResult['text'], sqlResult['title']);
  }
);
// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({ secret: 'your secret here' }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
  app.use(express.errorHandler()); 
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
    title: sqlResult['title']
  });
});

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

我的问题是,如何显示由MySQL查询检索的所有元素的列表?

谢谢:)

4 个答案:

答案 0 :(得分:7)

将完整结果传递给Jade

app.get('/', function(req, res){
  newClient.query('USE '+Database);
  newClient.query('SELECT * FROM '+Table, function selectCb(err, results, fields) {
    if (err) {
      throw err;
    }
    res.render('index', {
      title: results[0].title,
      results: results
    });
  }
});

然后在你的Jade中迭代它们

- for( var i = 0, len = results.length; i < len; i++ ) {
  .result
    .field1= results[i].field1
    .field2= results[i].field2
- }

答案 1 :(得分:4)

更好

ul
  - each result in results
  li= result.text

答案 2 :(得分:2)

感谢通才,我找到了一条路。

基本上我不需要在mysql get函数或服务器js中的查询函数中添加其他东西。

这是关于jade引擎的,这段代码可以工作:将你从get函数传递的变量(在这种情况下是结果)作为输入,然后通过它迭代,选择我想要的字段。

h1 Hello there!
p Welcome to this try
- for( var i = 0; i < results.length; i++ ) {
- var textbody = results[i]
    p= textbody['text']
- }

希望未来可能会帮助其他人:)

答案 3 :(得分:1)

喜欢这个。结果是一个数组,所以你必须循环它

    for (var i in results){
         var sqlResult = results[i];
         console.log(sqlResult['text'], sqlResult['title']);
    }