【问题标题】:node.js: output mysql (npm) pool to html or jadenode.js:将mysql(npm)池输出到html或jade
【发布时间】:2016-10-30 12:37:52
【问题描述】:

我们正在尝试从 mysql 检索数据以将其显示在 html/jade 中。很遗憾,我们无法在 HTML 表格中显示记录。

由于我们使用的是 mysql 池,所以事情变得更加困难。到目前为止,这是我们的代码。 (使用 express 生成器构建骨架)

/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;

(注释掉 for-of 和 console.log 将打印 SQL 行)

路由/index.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;

views/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' 获取数据?

【问题讨论】:

    标签: javascript html mysql node.js express


    【解决方案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
        });
    });
    

    如果这是您想要实现的目标,您可以将它们拆分为不同的文件。

    【讨论】:

    • 是的,这是一个非常好的解决方案。感谢发帖。
    • router.get()之前function(req, res, next)之前是否可以使用多个函数?
    • 是的,回调之前可以有多个函数。
    【解决方案2】:

    您似乎无法将快速路由器和 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;
    

    models/bew.js

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

    最好将它们分开,我们不知道这怎么可能。

    【讨论】:

    • 我通常在get回调之前调用一个函数。 router.get('/', sqlQuery, function(req, res, next) { ... }) 并通过 req 传递内容
    • @Kilian Stinson 您可以发布一个示例作为答案吗?这将有助于更好地理解。
    猜你喜欢
    • 2014-12-16
    • 2016-11-13
    • 2018-10-12
    • 1970-01-01
    • 2016-06-25
    • 2012-03-14
    • 2013-09-01
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多