簡體   English   中英

無法使用 Mongoose 從數據庫中刪除項目

[英]Unable to delete an item from the database using Mongoose

我試圖在博客網站中添加此刪除功能,這樣當用戶單擊刪除按鈕時,它會從數據庫中刪除該特定項目,但我遇到了一些錯誤。

這是我的 home.ejs:

 <%- include("partials/header"); -%>
    <h1>Home</h1>
    <p> <%= startingContent %> </p>


  <%  posts.forEach(function(post){ %>

    <h1><%=post.title%></h1>
    <p>
    <%=post.content.substring(0, 100) + " ..."%>
    <a href="/posts/<%=post._id%>">Read More</a>
    </p>


    <% }) %>

<%- include("partials/footer"); -%>

這是 post.ejs(每個日記條目的頁面,當有人點擊閱讀更多時,它會將用戶發送到該特定帖子的頁面)

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

  <h1><%=title%></h1>
  <p><%=content%></p>

  <form action="/posts/delete" method="post">
    <button class="btn btn-warning btn-small" name="button" type="submit" value="<%=post._id%>">Delete</button>
  </form>

<%- include("partials/footer"); -%>

這是我的 app.js:

//jshint esversion:6

const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const mongoose = require("mongoose");

const homeStartingContent = "Lacus vel facilisis volutpat est velit egestas dui id ornare. Semper auctor neque vitae tempus quam. Sit amet cursus sit amet dictum sit amet justo. Viverra tellus in hac habitasse. Imperdiet proin fermentum leo vel orci porta. Donec ultrices tincidunt arcu non sodales neque sodales ut. Mattis molestie a iaculis at erat pellentesque adipiscing. Magnis dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Adipiscing elit ut aliquam purus sit amet luctus venenatis lectus. Ultrices vitae auctor eu augue ut lectus arcu bibendum at. Odio euismod lacinia at quis risus sed vulputate odio ut. Cursus mattis molestie a iaculis at erat pellentesque adipiscing.";
const aboutContent = "Hac habitasse platea dictumst vestibulum rhoncus est pellentesque. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Non diam phasellus vestibulum lorem sed. Platea dictumst quisque sagittis purus sit. Egestas sed sed risus pretium quam vulputate dignissim suspendisse. Mauris in aliquam sem fringilla. Semper risus in hendrerit gravida rutrum quisque non tellus orci. Amet massa vitae tortor condimentum lacinia quis vel eros. Enim ut tellus elementum sagittis vitae. Mauris ultrices eros in cursus turpis massa tincidunt dui.";
const contactContent = "Scelerisque eleifend donec pretium vulputate sapien. Rhoncus urna neque viverra justo nec ultrices. Arcu dui vivamus arcu felis bibendum. Consectetur adipiscing elit duis tristique. Risus viverra adipiscing at in tellus integer feugiat. Sapien nec sagittis aliquam malesuada bibendum arcu vitae. Consequat interdum varius sit amet mattis. Iaculis nunc sed augue lacus. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing elit. Pulvinar elementum integer enim neque. Ultrices gravida dictum fusce ut placerat orci nulla. Mauris in aliquam sem fringilla ut morbi tincidunt. Tortor posuere ac ut consequat semper viverra nam libero.";

const app = express();

app.set('view engine', 'ejs');

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
mongoose.set('useNewUrlParser', true);
mongoose.set('useUnifiedTopology', true);

mongoose.connect("mongodb://localhost:27017/blogDB");

const postSchema = {
  title: String,
  content: String
};

const Post = mongoose.model("Post", postSchema);

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

  Post.find({}, function(err, posts) {
    res.render("home", {
      startingContent: homeStartingContent,
      posts: posts
      });
  });

});

app.get("/about", function(req, res){
  res.render("about", {aboutContent: aboutContent});
});

app.get("/contact", function(req, res){
  res.render("contact", {contactContent: contactContent});
});

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

app.post("/compose", function(req, res){
  const post = new Post ({
    title: req.body.postTitle,
    content: req.body.postBody
  });

  post.save(function(err){

   if (!err){
     res.redirect("/");
   }

  });

});

app.get("/posts/:postId", function(req, res){
  const requestedPostId = req.params.postId;

  Post.findOne({_id: requestedPostId}, function(err, post) {
    res.render("post", {
      title: post.title,
      content: post.content
    });
  });

});

app.post("/delete", function (req, res) {
  const idDelete = req.body.button;

  Post.findByIdAndRemove(idDelete, function(err) {
    if (!err) {
      console.log("Deleted Sucessfully");
    }
    res.redirect("/");
  });
});

app.listen(3000, function() {
  console.log("Server started on port 3000");
});

但我遇到的問題是,服務器拒絕識別我用於 post.ejs 中按鈕值的“post._id”。 在此處輸入圖像描述

如果我刪除按鈕值,控制台日志顯示“已成功刪除”,我也會被重定向到主頁,但它根本不會刪除帖子。

這就是我的帖子頁面的外觀(但正如我所說,它並沒有真正起作用,如果我單擊刪除,我只會被重定向到主頁:

在此處輸入圖像描述

在渲染post.ejs或完成 object 時,您要么需要傳遞_id 您只是傳遞了titlecontent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM