【问题标题】:Problem with mongoose schema reference in NodeNode中猫鼬模式引用的问题
【发布时间】:2019-04-12 00:53:25
【问题描述】:

我是 Node、Mongoose 以及与后端相关的所有内容的新手。我最近遇到了一个问题。我无法弄清楚,因为开发课程的练习文件中的相同代码似乎是相同的。然而问题仍然没有解决。我正在尝试做的事情,与教程一起编码,是我想为我在页面上显示的每个露营地部分在 Mongo 数据库中为 cmets 定义一个 Mongoose 模型。我有模型文件夹,我在其中定义露营地和 cmets 的模型,一个种子.js 文件,我在其中动态地将数据添加到露营地(以便它立即与 cmets 一起出现),然后添加 cmets。以下是这些文件的实际代码: app.js-->

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var mongoose = require('mongoose');
var Campground=require("./models/campground");
var seedDB = require("./seeds");
var PORT = process.env.IP || 3200;

seedDB();

mongoose.connect('mongodb://localhost/yelp_camp', { useNewUrlParser: true }, 
(err, res) => {
if (err) throw err;
console.log('Database online');
});
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");

//schema

app.get("/", function (req, res) {
res.render("landing");

});

app.get("/campgrounds/tornike", function (req, res) {
//get all campgrounds
res.send(Campground.name);

});

app.get("/campgrounds", function (req, res) {
//get all campgrounds
Campground.find({}, function (err, camp) {
    if (err) {
        console.log("ERROR");
        console.log(err);
    } else {
        res.render("index", { campgrounds: camp });
    }
});

});

app.post("/campgrounds", function (req, res) {
var name = req.body.name;
var image = req.body.image;
var desc = req.body.description;
var newCampground = { name: name, image: image, description:desc };
//create new camp and save to database
Campground.create(newCampground, function (err, newlyCreated) {
    if (err) {
        console.log(err);
    } else {
        res.redirect("/campgrounds");
    }

});

});

app.get("/campgrounds/new", function (req, res) {
res.render("new.ejs");

});

//shows more info about camp
app.get("/campgrounds/:id", function (req, res) {
//find camp with provided id 
Campground.findById(req.params.id, function (err, foundCampground) {
    if (err) {
        console.log(err);
    } else {
        //render show template
        res.render("show", { campground: foundCampground });
    }
});

});


app.listen(PORT, process.env.IP, function () {
console.log("camp");
});

seeds.js ---->

var mongoose = require("mongoose");
var Campground = require("./models/campground");
var Comment = require("./models/comment");

var data = [
{
name: "something",
image: "image URL",
description: "blah blah bla1"
},

{
name: "something",
image: "image URL",
description: "blah blah bla2"
},

{
name: "something",
image: "image URL",
description: "blah blah bla3"
}
];

function seedDB() {
Campground.deleteMany({}, function(err) {
console.log("removed camps");
data.forEach(function(seed) {
  Campground.create(seed, function(err, data) {
    if (err) {
      console.log(err);
    } else {
      console.log("added campground");
      Comment.create(
        {
          text: "dubdabdubadah",
          author: "Homer"
        },
        function(err, comment) {
          if (err) {
            console.log(err);
          } else {
            campground.comments.push(comment);
            campground.save();
            console.log("Created new comment");
          }
        }
      );
    }
  });
});
});
}

module.exports = seedDB;

comment.js --->

var mongoose = require("mongoose");


var commentSchema= new mongoose.Schema({
text:String,
author:String
});


module.exports=mongoose.model("Comment", commentSchema);

campground.js ---->

var mongoose = require("mongoose");

var campgroundSchema = new mongoose.Schema({
name: String,
image: String,
description: String,
comments: [
{
  type: mongoose.Schema.Types.ObjectId,
  ref: "Comment"
}
]
});

module.exports = mongoose.model("Campground", campgroundSchema);

seeds.js 文件在这行 campground.cmets.push(comment); 中发生错误 它看起来像这样:

[nodemon] starting `node app.js`
camp
Database online
removed camps
added campground
added campground
added campground
events.js:183
throw er; // Unhandled 'error' event
^
ReferenceError: campground is not defined

在将代码与练习文件代码进行比较时,我实际上无法理解这一点 - 它是相同的。我唯一能想到的是猫鼬快递的版本或其他可能不相关的版本或不推荐使用的某些方法,但老实说不知道出了什么问题。我已经尝试解决它好几天了。任何想法的人?

【问题讨论】:

    标签: node.js mongodb express mongoose mongoose-schema


    【解决方案1】:

    错误信息告诉你你没有定义一个名为campground的变量,这是正确的,因为你没有。

    要解决此问题,请将 Campground.create 回调中的 data 更改为 campground

    Campground.create(seed, function(err, campground) {
    

    【讨论】:

    • 感谢一百万 JohnnyHK !!!这个回调地狱有时真的很混乱!
    猜你喜欢
    • 2021-04-10
    • 2018-03-04
    • 2019-08-21
    • 2017-02-17
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2022-01-17
    • 2016-08-05
    相关资源
    最近更新 更多