2016-06-28 9 views
0

Wir versuchen, Daten von MySQL abzurufen, um es in HTML/Jade anzuzeigen. Leider können wir die Datensätze in der HTML-Tabelle nicht anzeigen.node.js: Ausgabe mysql (npm) Pool zu html oder jade

Da wir den MySQL-Pool verwenden, wird es immer schwieriger. Hier ist unser Code soweit. (Verwendet Skelett Build Express Generator)

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

(Kommentieren Sie die für-of und console.log wird die SQL-Zeilen drucken)

Routen/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 wäre besser)

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 

Wir haben mehrere Tests durchgeführt und es scheint, als ob die index.js nicht die Daten von 'bew.js' bekommt?

Antwort

1

Ich habe es ein wenig abgebrochen, um es einfacher zu lesen. So würde ich es lösen.

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 
    }); 
}); 

Auf diese Weise können sie in verschiedenen Dateien aufteilen kann, wenn das ist, was Sie erreichen wollten.

+0

Ja das ist eine wirklich nette Lösung. Danke fürs Schreiben. – user3772108

+0

Ist es möglich, mehr als eine Funktion in 'router.get()' vor 'function (req, res, next)' zu verwenden? – user3772108

+1

Ja, es ist möglich, vor dem Rückruf mehrere Funktionen zu haben. –

0

Es scheint, als ob Sie den Express-Router und die SQL-Abfrage nicht trennen können. Dies ist so, wie es jetzt für uns gearbeitet:

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

Es wäre schön, sie zu trennen mehr wir es nicht tun kenne einen Weg, wie das möglich sein könnte.

+0

Ich rufe normalerweise eine Funktion vor dem Rückruf von bekommen. 'router.get ('/', sqlQuery, Funktion (req, res, next) {...})' und den Inhalt über 'req' übergeben –

+0

@Kilian Stinson Kannst du vielleicht ein Beispiel als Antwort posten? Dies würde helfen, besser zu verstehen. – user3772108