ForEach在mongodb上不起作用,但是在本地数组声明中可以正常工作

时间:2018-07-29 08:29:45

标签: node.js mongodb ejs

error of the code

我的forEach循环在尝试从数据库(mongodb)中获取数据时无法在ejs文件中工作,它包含一个集合,即campground。但是当我将一个对象集合存储在myapp.js代码中的数组中时,它工作正常。但是当我尝试通过将数据存储在数据库中来实现时,它显示了 campground.forEach不是函数

的错误

这是我的代码:

myapp.js

var express=require("express");
var app=express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/campit");
var campgroundSchema=new mongoose.Schema({
  name:String,
  image:String
});

var campground=mongoose.model("campground",campgroundSchema);
app.get("/create",function(req,res){
   campground.find({},function(err,campgrounnd){
      if(err){
        console.log(err);
      }
      else{
        res.render("index.ejs",{campground:campground});
      }
    })
 });
app.listen("3000",function(){
  console.log("listening from server 3000"); 
});

index.ejs文件,该文件应该呈现并且包含for.Each循环

  <div class="container">
  <div class="row no-gutters">
    <% campground.forEach(function(camp){ %>
      <div class="col col-lg-4 img-thumbnail">
        <img class="but" height="75%" width="100%" src="<%=camp.image%>" alt="image">
        <div class="text-center">
          <h6><%= camp.name %> </h6>
          <button class="btn btn-outline-info " type="button" name="more info"> more info</button>
        </div>
      </div>
    <% }); %>
  </div>
</div>

任何帮助都会得到高度重视。.谢谢 console.log the campground

2 个答案:

答案 0 :(得分:4)

MongooseJS中的find方法返回一个Query对象(引用)。您可以通过几种方式进行搜索并返回结果。

   campground.find().exec(function(err,result){
      if(err){
        console.log(err);
      }
      else{
        res.render("index.ejs",{campground:result});
      }
   });

答案 1 :(得分:0)

我认为您的变量名冲突

var campground=mongoose.model("campground",campgroundSchema); // here is a campground
app.get("/create",function(req,res){
   campground.find({},function(err,result /* <-- */){ // the result is also campgrounnd
      if(err){
        console.log(err);
      }
      else{
        res.render("index.ejs",{campground:result/* <-- */}); // pass result instead campgrounnd
      }
    })
 });