2014-06-16 4 views
0

J'essaie de parcourir une collection pour créer une table des matières et de la montrer à l'utilisateur par le biais de jade, mais tableContent est 'No Orders' chaque fois que je cours, même si je pense J'ai réglé le db correctement.Node.js itération de collecte de Mongoskin> Jade

"listing.js" pour itérer la collection db et de l'envoyer à jade

var express = require('express'); 
var router = express.Router(); 

var mongo = require('mongoskin'); 
var db = mongo.db("mongodb://localhost:27017/db", {native_parser:true}); 

var iterateOrders = function() { 
    var tableContent = ''; //TableContent Array 
    db.collection('orders').find({}, function(err, result) { 
    result.each(function(err, order) { 
     tableContent += '<tr>'; 
     tableContent += '<td>' + this.orderID + '</td>'; 
     tableContent += '<td>' + this.receiverName + '</td>'; 
     tableContent += '<td>' + this.receiverAddress + '</td>'; 
     tableContent += '<td>' + this.receiverEmail + '</td>'; 
     tableContent += '<td>' + this.order + '</td>'; 
     tableContent += '</tr>'; 
     }); 
    }); 
    if (tableContent === '') {tableContent = 'No Orders';} 
    return tableContent; 
    } 

router.get('/', function(req, res) { 
    res.render('listing', { 
    title: 'Orderlist:', 
    table: iterateOrders() }); 
}); 

module.exports = router; 

Je l'ai écrit à la base de données manuellement à l'aide "mongo"

db.orders.insert ({ 'orderID' ... en '})

Ma mise en œuvre de jade est

block content 
    table 
    thead 
     th # 
     th Name 
     th Addr 
     th Email 
     th Order 
    tbody= table 

Répondre

1

Renvoyer une valeur à l'aide du mot-clé return ne fonctionnera pas dans un appel asynchrone. Vous devez renvoyer la valeur dans le rappel. Voici le code:

var express = require('express'); 
var router = express.Router(); 

var mongo = require('mongoskin'); 
var db = mongo.db("mongodb://localhost:27017/db", {native_parser:true}); 

var iterateOrders = function(callback) { 
    var tableContent = ''; //TableContent Array 
    db.collection('orders').find({}).toArray(function(err, result) { 
    for (var i = 0, len = result.length; i < len; i++) { 
     tableContent += '<tr>'; 
     tableContent += '<td>' + result[i].orderID + '</td>'; 
     tableContent += '<td>' + result[i].receiverName + '</td>'; 
     tableContent += '<td>' + result[i].receiverAddress + '</td>'; 
     tableContent += '<td>' + result[i].receiverEmail + '</td>'; 
     tableContent += '<td>' + result[i].order + '</td>'; 
     tableContent += '</tr>'; 
    } 
    if (tableContent === '') {tableContent = 'No Orders';} 
    callback(null, tableContent); 
    }); 
} 

router.get('/', function(req, res) { 
    iterateOrders(function(err, tableContent) { 
    res.render('listing', { 
     title: 'Orderlist:', 
     table: tableContent 
    }); 
    }); 
}); 

module.exports = router; 
+0

Ceci fixé que pour moi, j'espère avoir appris quelque chose de ceci;) Merci. – Axuttaja

Questions connexes