2017-05-30 3 views
1

Wenn ich <%= products %> in meine Sicht setzen, druckt es [Object Object], so nehme ich an, dass die Mungo-Ergebnismenge ein Objekt ist. Jetzt versuche ich, über products Objekt zu schleifen, aber es sagt products.forEach is not a function.Iterate Mungo Objekt mit EJS

Das ist mein index route:

var express = require('express'); 
 
var router = express.Router(); 
 
var Product = require('../model/product'); 
 

 
/* GET home page. */ 
 
router.get('/', function(req, res, next) { 
 
    var products = Product.find(); 
 
    res.render('index', { title: 'Express', products: products }); 
 
}); 
 

 
module.exports = router;

mit dem Code oben, ich bin nur aus der DB abgerufen und als Objekt übergeben. Ich habe versucht, var products = Product.find({}).toArray(); zu verwenden, aber habe kein Glück. Und eine andere Lösung, die ich versucht wird, mit diesem Code:

var products = Product.find(); 
 
    var data = JSON.stringify(products); 
 
    res.render('index', { title: 'Express', products: data });
aber ich bin mit dem berüchtigten Converting circular structure to JSON Fehler.

Das ist mein index view:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <title><%= title %></title> 
 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
 
    </head> 
 
    <body> 
 
    <h1><%= title %></h1> 
 
    <p>Welcome to <%= title %></p> 
 

 
    <% products.forEach(function(product) { %> 
 
    \t <p><%= product.title %></p> 
 
    <% }); %> 
 
    </body> 
 
</html>
schließlich das ist mein Product Schema:

var mongoose = require('mongoose'); 
 
var Schema = mongoose.Schema; 
 

 
var schema = new Schema({ 
 
\t imagePath: { type: String, required: true }, 
 
\t title: { type: String, required: true }, 
 
\t description: { type: String, required: true }, 
 
\t price: { type: Number, required: true } 
 
}); 
 

 
module.exports = mongoose.model('Product', schema);

Wie ist der richtige Weg, es zu tun?

+1

'finden()' ist async .. Sie benötigen ein Versprechen die Ergebnisse zu erhalten .. bezogen werden: https://stackoverflow.com/questions/6180896/how-to-return-mongoose-results-from-the-find-method – Pogrindis

Antwort

1

find ist async Sie von Versprechen zur Folge erhalten tun müssen, um es so:

router.get('/', function(req, res, next) { 
    Product.find({}, function(err, products) { 
     res.render('index', { title: 'Express', products: products }); 
    }); 
}); 
+0

Großartig! Danke – Welp