2016-06-28 104 views
0

我们试图从mysql中检索数据以将其显示在html/jade中。不幸的是,我们无法在HTML表格上显示记录。node.js:将mysql(npm)输出到html或jade

由于我们使用mysql池,事情变得更加困难。这是我们的代码。 (通过快递发生器采用骨架构建)

/models/bew.js

var mysql = require('mysql'); 
var pool = require('./databaseConnection'); 

var sorter = 'db.bew'; 
var sql = 'SELECT * FROM' + pool.escapeId(sorter); 
var records = pool.query(sql, function(err, rows, fields) { 
    if (err) throw err; 

    // foreach 
    // for(row of rows){ 
    // console.log(row); 
    // } 

    //console.log('The fields: ', rows[0].id); 
}); 
module.exports = records; 

(注释掉换的和的console.log将打印SQL行)

路线/指数。 JS

var express = require('express'); 
var router = express.Router(); 
var records = require('../models/bew'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { 
    title: 'Bewerber', 
    records: records 
    }); 

}); 

module.exports = router; 

的意见/ index.jade(HTML效果会更好)

extends layout 

block content 
    body 

    table#tblBewerber 
     thead 
     tr 
      th Name 
      th Status 
      th Letzte Änderung 
      th Datum 
      th Angelegt 
      th Nächster Schritt bis 
      th Nächster Schritt 
      th Zul. bearbeiten 
      th Bew. für 
     tbody 
     each record in records 
      tr 
      td=record.namen 

我们做了几个测试,看起来像index.js没有从'bew.js'中获取数据?

回答

1

我把它分解了一下,使它更容易阅读。 这是我如何解决它。

function sqlQuery(req, res, next) { 
    pool.query("SELECT ...", function (err, rows) { 
     req.records = rows; 
     next(); 
    }) 
} 


router.get('/', sqlQuery, function(req, res, next) { 
    res.render('index', { 
     title: 'Bewerber', 
     records: req.records 
    }); 
}); 

这样你就可以将它们分成不同的文件,如果这是你想要实现的。

+0

是的,这是一个非常好的解决方案。感谢发布。 – user3772108

+0

在'function(req,res,next)'之前的'router.get()'里面可以使用多个函数吗? – user3772108

+1

是的,在回调之前可以有多个功能。 –

0

看来你不能单独使用express路由器和sql查询。这是现在为我们工作的方式:

路线/ index.js

var mysql = require('mysql'); 
var express = require('express'); 
var router = express.Router(); 

var pool = require('../models/databaseConnection'); 
var sql = require('../models/bew'); 


router.get('/', function(req, res, next) { 
    pool.query(sql, function(err, rows, fields) { 
    if (err) throw err; 

    res.render('index', { 
     title: 'Bewerber', 
     records: rows 
    }); 
    }); 
}); 
module.exports = router; 

型号/ bew.js

var pool = require('./databaseConnection'); 
var sorter = 'bewerber.bewerber'; 
var sql = 'SELECT * FROM' + pool.escapeId(sorter); 
module.exports = sql; 

这将是很好它们分开越是不知道如何做到这一点。

+0

我通常在get回调之前调用一个函数。 'router.get('/',sqlQuery,function(req,res,next){...})'并通过'req'传递内容 –

+0

@Kilian Stinson你可能会发布一个例子作为答案吗?这将有助于更好地理解。 – user3772108