Я хочу удалить сообщение, но есть ошибки, которые я не могу выяснить. Как удалить данные из базы данных с помощью команды DELETE? - PullRequest
0 голосов
/ 10 января 2020

ЗДЕСЬ ДВА ОШИБКИ, КОТОРЫЕ Я ПОЛУЧАЮ.

MongooseError [CastError]: Cast to ObjectId failed for value "{item._id}" at path "_id" for model "Post"

Второй

  stringValue: '"{item._id}"',
  kind: 'ObjectId',
 value: '{item._id}',
 path: '_id',


reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

Мой индекс. js

mongoose.connect("mongodb://localhost:27017/postcomment", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });

var Schema = mongoose.Schema;

var PostSchema = new Schema({
   title: String,
   content: String,
   author: String
});

var Post = mongoose.model('Post', PostSchema);


router.delete( '/post/:id', function( req, res ){
   let query = {_id:req.params.id}

  Post.deleteOne(query, function(err) {
    if(err){
   console.log(err);
   }
  res.send('Success');
 });
});

Мой Удалить button

<a class="delete-article" href="#" data-id="{item._id}">Delete</a>

My main. js File

$(document).ready(function() {
$('.delete-article').on('click', function(e) {
   const $target = $(e.target);
    const id = $target.attr('data-id');
    $.ajax({
        type: 'DELETE',
        url: '/post/'+id,
        success: function(response) {
            alert('Deleting Post');
            window.location.href='/';
        },
        error: function(err){
            console.log(err);
        }
    });
}); 
[![This is a snapshot of the error message][1]][1]});

My View

<% items.forEach(item => { %>
<ul>
    <h1><%=item.title%></h1>
    <li><%= item.content %></li>
    <li><%= item.author %></li>
    <a class="delete-article" href="#" data-id="{item.id}">Delete</a>

  </ul>
<% });%>
<li><a href="/newpost">Add New Post</a></li>

Я новичок в Node и Javascript и я Я пытаюсь построить что-то как способ обучения. но я столкнулся с ошибкой, которая заставляла меня пытаться часами безуспешно. пожалуйста, мне нужна помощь, чтобы исправить эту ошибку.

Я пытаюсь сохранить ее CRUD, поэтому я использую delete, чтобы удалить сообщение из базы данных. Ошибки, которые я получаю, относятся к укусу ObjectId и passing a single string of 12, я пробовал, но не удалось. пожалуйста, я буду признателен за любую помощь, чтобы исправить это, а также объяснение, чтобы помочь мне понять это.

Спасибо, ребята

Ответы [ 2 ]

1 голос
/ 11 января 2020

Вы можете попробовать это, может быть, идентификатор, который вы передаете из внешнего интерфейса, не в формате ID

 const mongoose = require('mongoose');
 const ObjectId = mongoose.Types.ObjectId;


 router.delete( '/post/:id', function( req, res ){
   // check the id if it is valid
    console.log(req.params.id)
    let query = {_id:new ObjectId(req.params.id)}

    Post.deleteOne(query, function(err) {
          if(err){
            console.log(err);
             }
        res.send('Success');
       });
     });
1 голос
/ 11 января 2020

Вы не передаете идентификатор документа, но передаете {item._id}, попробуйте исправить свой data-id="{item._id}", чтобы передать фактический _id. Проверьте на своем роутере идентификатор параметра, который вы отправляете из браузера

router.delete( '/post/:id', function( req, res ){
    // check the id if it is valid
    console.log(req.params.id)
   let query = {_id:req.params.id}

  Post.deleteOne(query, function(err) {
    if(err){
   console.log(err);
   }
  res.send('Success');
 });
});

Какой шаблонизатор вы используете?

...