Ich habe mehrere MySQL-Abfrage-Ergebnisse, wo ich die erste rendern und die restlichen zu einer einzigen EJS-Datei (/ Daten) als Objekte aufrufbar machen.Node.js - Mehrere Objekte an die gleiche EJS-Datei übergeben
mache ich nur die ersten Abfrageergebnisse (obj) und dann mache ich den Rest aufrufbar zum EJS (rsum_total_sales & rsum_count_active)
Es scheint, dass das erste Mal, dass ich laden die EJS-Datei ich Frontend 500 Fehler wie
rsum_total_sales is not defined
aber wenn ich den Browser neu zu laden erhalte ich die EJS zu loa in Ordnung, zeigt alle benötigten Ergebnisse aus der Routendatei.
Seltsame Sache, dass sogar das erste Mal, in console.log() sehe ich, dass alle drei Abfrageergebnisse in die Objekte, die ich gemacht habe, aber sie können noch nicht aufrufbar sein, die EJS außer den ersten, die direkt rendert zu ihm.
Vom EJS Fehler kann ich sehen, dass es die ersten connection.query Ergebnisse (obj) passiert, die gemacht wird, aber nicht der Rest zwei (rsum_total_sales & sum_count_active), die ich ihre Objekte machen aufrufbar nur, bis ich den Browser neu zu laden.
Routendatei
var obj = {};
var qsum_total_sales = 'SELECT SUM (total_price) AS s_total_price FROM myrecords';
var qsum_count_active = 'SELECT COUNT (*) AS s_count_active FROM myrecords WHERE NOT status = "canceled" ';
var qdata = 'SELECT * FROM myrecords';
router.get('/data', function(req, res){
connection.query(qdata, function(err, result) {
if(err){
throw err;
} else {
obj = {print: result};
res.render('data', obj);
console.log(obj);
}
});
connection.query(qsum_total_sales, function(err, rows, result) {
if(err){
throw err;
} else {
rsum_total_sales = JSON.parse(rows[0].s_total_price).toFixed(2);
console.log(rsum_total_sales);
//First time prints result but it can't be called to EJS until reloading EJS
}
});
connection.query(qsum_count_active, function(err, rows, result) {
if(err){
throw err;
} else {
rsum_count_active = JSON.parse(rows[0].s_count_active);
console.log(rsum_count_active);
//First time prints result but it can't be called to EJS until reloading EJS
}
});
});
EJS Datei
<tbody>
<% print.forEach(function (datatable) { %>
<tr>
<td><%= datatable.id %></td
<td><%= datatable.full_name %></td>
//rest of loop
</tr>
<% }) %>
</tbody>
// some html code
<h4>Total sales sum is: <%- rsum_total_sales %></h4>
<h4>Total active records are: <%- rsum_count_active %></h4>
Frontend Fehler (nur, wenn es das erste Mal ist, dass EJS Lasten an den Browser)
ReferenceError: C:\NodeJS\CRUD-1\views\data.ejs:39
37| </table>
38| <hr/>
>> 39| <h4>Total sales sum is: <%- rsum_total_sales %></h4>
40| <h4>Total active records are: <%- rsum_count_active %></h4>
rsum_total_sales is not defined
at eval (eval at <anonymous> (C:\NodeJS\CRUD-1\node_modules\ejs\lib\ejs.js:481:12),
<anonymous>:47:17)
at returnedFn (C:\NodeJS\CRUD-1\node_modules\ejs\lib\ejs.js:512:17)
at View.exports.renderFile [as engine] (C:\NodeJS\CRUD- 1\node_modules\ejs\lib\ejs.js:364:31)
at View.render (C:\NodeJS\CRUD-1\node_modules\express\lib\view.js:126:8)
at tryRender (C:\NodeJS\CRUD-1\node_modules\express\lib\application.js:639:10)
at EventEmitter.render (C:\NodeJS\CRUD-1\node_modules\express\lib\application.js:591:3)
at ServerResponse.render (C:\NodeJS\CRUD-1\node_modules\express\lib\response.js:960:7)
at Query._callback (C:\NodeJS\CRUD-1\routes\data.js:36:17)
at Query.Sequence.end (C:\NodeJS\CRUD-1\node_modules\mysql\lib\protocol\sequences\Sequence.js:86:24)
at Query._handleFinalResultPacket (C:\NodeJS\CRUD-1\node_modules\mysql\lib\protocol\sequences\Query.js:144:8)
ich sehe nicht, wo Sie senden 'rsum_total_sales' und' rsum_count_active' zum Frontend. –