2016-12-05 2 views
0

I mysql Modul in node.js verwenden lerne, so dass ich es mit Express & Mustache eine MySQL-Tabelle zu machen und kam mit dies: für (... in ...) Schleife funktioniert nicht in node.js

var express = require('express'); 
var app = express(); 

var mu2 = require('mu2'); 
mu2.root = __dirname + '/views'; 

var mysql = require('mysql'); 
var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "root", 
    port: 3306, 
    database: 'breakthrough' 
}); 

con.connect(function (err) { 
    if (err) { 
     console.log('Error connecting to database:\n' + err); 
     return; 
    } 
}); 

app.get('*', function (req, res) { 
    var tableHTML; 
    function renderTable(rows) { 
     tableHTML = "<table>"; 
     for (var row in rows) { 
      tableHTML += "<tr>"; 
      for (var cell in row) { 
       tableHTML += ("<td>" + cell + "</td>"); 
      } 
      tableHTML += "</tr>"; 
     } 
     tableHTML += '</table>'; 
    } 
    con.query('SELECT * FROM drivers', function (err, rows){ 
     if (err) { throw(err); } 
     renderTable(rows); 
     htmlStream = mu2.compileAndRender('frontPage.html', {table: tableHTML}); 
     htmlStream.pipe(res); 
    }); 
}); 

app.listen(8080, function() { 
    console.log("Listening on port 8080."); 
}); 

Aber die resultierende Tabelle nur Nullen zeigen, eine für jede Zeile:

<table> 
    <tr><td>0</td></tr> 
    <!-- tr repeated for each row in rows --> 
</table> 

Einige Lesungen deuten darauf hin, dass in node.js über Objekte iterieren derzeit recht problematisch ist. Gibt es irgendeine Möglichkeit, über Objekte von node.js zu iterieren?

+1

'Zelle' ist der Index. Wenn Sie den Inhalt haben wollen, müssen Sie 'row [cell]' ausdrucken (und auch über 'rows [row]' iterieren). – JJJ

Antwort

1

Es scheint, dass Reihen ein Array ist (nach https://www.npmjs.com/package/mysql) so, wenn Sie tun:

for(var row in rows) 

Zeile nur den Index nehmen und den Wert nicht, deshalb für Schleife Ihre zweite falsch ist. Darüber hinaus nehmen nur den Index und den Wert

Ändern Sie es an:

for (var row in rows) { 
    tableHTML += "<tr>"; 
    for (var cell in rows[row]) { 
     tableHTML += ("<td>" + rows[row][cell] + "</td>"); 
    } 
    tableHTML += "</tr>"; 
} 

Aber Looping über ein Array mit in keine gute Idee ist, Why is using "for...in" with array iteration a bad idea?

Verwendung siehe:

 for (var i = 0; i < rows.length; i++) { 
     tableHTML += "<tr>"; 
     for (var cell in rows[i]) { 
      tableHTML += ("<td>" + rows[i][cell] + "</td>"); 
     } 
     tableHTML += "</tr>"; 
     }