2014-06-16 51 views
0

我想通过集合迭代创建一个目录并将其显示给用户槽玉,但tableContent每次运行时都是'No Orders',即使很艰难我想我已经正确设置了分贝。Node.js Mongoskin集合迭代> Jade

“listing.js”为遍历数据库收集并发送其关闭,以玉

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; 

我已经写入到数据库中使用手动“蒙戈”

db.orders.insert( { '的orderID' ......恩'})

我的翡翠实现

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

回答

1

使用return关键字返回值在异步调用中不起作用。您需要在回调中将值传递回去。这里的代码:

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

这固定对我来说,希望我从中学到了一些东西;)谢谢。 – Axuttaja