Недостающий маршрут к POST - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь добавить комментарий sh, но когда я отправляю его, я получаю сообщение об ошибке, перенаправляя его на страницу / campgrounds, как указано в приведенном ниже коде. Я не понимаю, что я делаю неправильно, я получаю следующую ошибку:

Cast to ObjectId failed for value " 5e634e71e6ac7a04f90b00fe" at path "_id"
for model "Campground"',
 name: 'CastError',
 model: Model { Campground } }

Может кто-нибудь сообщить мне, что мне не хватает? Заранее большое спасибо! У меня есть следующий Javascript файл:

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var mongoose = require("mongoose");
Campground = require("./models/campground");
Comment = require("./models/comment");
seedDB = require("./seeds");


mongoose.connect("mongodb://localhost/yelp_camp_v3", { useNewUrlParser: true });
mongoose.set("useUnifiedTopology", true);

app.use(bodyParser.urlencoded({extended: true}));
app.set("view engine", "ejs");
seedDB();

var campgrounds = [
        {name: "Mountain Goat's Rest", image:"https://images.pexels.com/photos/6757/feet-morning-adventure-camping.jpg?auto=compress&cs=tinysrgb&h=650&w=940"}
    ];

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

//INDEX - show all campgrounds
app.get("/campgrounds", function(req, res){
    //Get all campgrounds from DB
    Campground.find({}, function(err, allCampgrounds){
        if(err){
            console.log(err);
        } else{
          res.render("campgrounds/index", {campgrounds: allCampgrounds});
        }
    });

});

// CREATE - add new campground to db
app.post("/campgrounds", function(req, res){
    //get data from form and add to campground array
    var name = req.body.name;
    var image = req.body.image;
    var desc = req.body.description;
    var newCampground = {name: name, image: image, description: desc}
    //Create a new campground sna dsave to database
    Campground.create(newCampground, function(err, newlyCreated){
        if(err){
            console.log(err);
        } else {
            //redirect back to campgrounds
            res.redirect("/campgrounds");
        }
    });
});

// //CREATE NEW CAMPGROUND TO DELET IF NOTWORK
// app.post("/campgrounds/:id", function(req, res) {
//  Campground.create(req.body, function (err, newlyCreated) {
//      if (err) console.log(err);  else 
//      res.redirect('/campgrounds/' + newlyCreated._id);
//    })
// });


//NEW - show form to create new campground
app.get("/campgrounds/new", function(req, res){
    res.render("campgrounds/new");
});

//SHOW Show info about one campsite
app.get("/campgrounds/:id", function(req, res){
    //Find the campground with provided ID
    Campground.findById(req.params.id).populate("comments").exec (function(err, foundCampground){
        if(err){
            console.log(err);
        } else {
            console.log(foundCampground);
            //render show template with that campground
            res.render("campgrounds/show", {campground: foundCampground});
        }
    });

});

//--------------
// COMMENT ROUTES
//--------------

app.get("/campgrounds/:id/comments/new", function(req, res){
    // find campground by id 
    Campground.findById(req.params.id, function(err, campground){
        if(err){
            console.log(err);
        } else {
            res.render("comments/new", {campground: campground});
        }
    })
});

app.post("/campgrounds/:id/comments", function(req, res){
    //lookup campground using ID
    Campground.findById(req.params.id, function(err, campground){
        if(err){
            console.log(err);
            res.redirect("/campgrounds");
        } else{
            Comment.create(req.body.comment, function(err, comment){
                if(err){
                    console.log(err);
                } else {
                    campground.comments.push(comment);
                    campground.save();
                    res.redirect("/campgrounds/" + campground._id);
                }
            });

        }
    });
    //create a new comments
    //connect new comment to campground
    //redirect  to campground show page
})


app.listen(3000, function() { 
  console.log('Yelpcamp Server Has Started'); 
});

И новый .e js файл, когда я указываю запрос на публикацию:

<%- include("../partials/header") %>

<div class="container">

<div class="row"> 
    <h1 style="text-align: center;">Add New Comment to <%= campground.name %></h1>
     <div style="width: 30%; margin: 25px auto;"> 
      <form action="/campgrounds/ <%= campground._id %>/comments " method="POST">
          <div class="form-group">
            <input class="form-control" type="comment[text]" name= "text" placeholder="text">  
          </div>
          <div class="form-group">
            <input class="form-control" type="text" name = "comment[author]" placeholder="author">
          </div>

          <div class="form-group">
            <button class="btn btn-lg btn-primary btn-block">Submit!</button>
          </div>
      </form>
 <a href="/campgrounds"> Go Back</a> 
    </div>

</div>

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

В вашем действии формы вы можете попытаться удалить пробел после "/ campgrounds /" и в конце. Так что измените

<form action="/campgrounds/ <%= campground._id %>/comments " method="POST">

на

<form action="/campgrounds/<%= campground._id %>/comments" method="POST">

Надеюсь, это поможет

0 голосов
/ 07 марта 2020

Я думаю, вы должны изменить в своем файле e js.

Это

  <form action="/campgrounds <%= campground._id %>/comments " method="POST">

на это:

  <form action="/campgrounds/ <%= campground._id %>/comments " method="POST">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...