2016-06-28 1 views
0

私たちは、mysqlからデータを取得してhtml/jadeで表示しようとしています。残念ながら、HTMLテーブルにレコードを表示することはできません。node.js:htmlまたはjadeへのmysql(npm)プールの出力

私たちはmysqlプールを使用しているので、状況はより困難になります。ここまでは私たちのコードです。 (とにconsole.log-のためコメントアウトSQL行を印刷します)/インデックス

ルートを

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

を(明示的発生器によって骨格ビルドを使用します)。 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

エクスプレスルータと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からのコールバックの前に関数を呼び出します。 'req'経由でコンテンツを渡します。 –

+0

@Kilian Stinson答えとして例を投稿することはできますか?これはより理解しやすくなります。 – user3772108

関連する問題