Удалить по значению поля [MEAN] - PullRequest
0 голосов
/ 22 сентября 2019

Я изучаю СРЕДНИЙ стек.Я хочу выполнить CRUD операции, и я использую mongoose.Я слежу за этим вопросом по stackoverflow.Я хочу удалить документ по определенному значению.В моем случае это article с уникальным articleid, который должен быть удален.По незнанию я совершаю ужасную ошибку с params.Пожалуйста, исправьте меня.

Образец документа в mongodb.

{
  _id: objectId("5d77de7ff5ae9e27bd787bd6"),
  articleid:"art5678",
  title:"Installing JDK 8 in Ubuntu 18.04 and later",
  content:"<h2>Step 1: Add repository</h2><p><strong>$ sudo add-apt-repository pp..."
  date:"Tue, 10 Sep 2019 17:33:51 GMT"
  contributor:"Tanzeel Mirza",
  __v:0
}

article.component.html

<div class="row mt-5">
    <div class="col-md-4 mb-3" *ngFor="let article of articles;">
      <div class="card text-center">
        <div class="card-body">
          <h5 class="card-title">{{article.title}}</h5>
          <a (click)="onPress(article.articleid)" class="btn btn-danger">Delete</a>
        </div>
      </div>
    </div>
  </div>

(click)="onPress(article.articleid") звонкиметод в ts файле.

article.component.ts

import { Component, OnInit } from '@angular/core';
import { ArticleService } from '../article.service';


@Component({
  selector: 'app-articles',
  templateUrl: './articles.component.html',
  styleUrls: ['./articles.component.css']
})
export class ArticlesComponent implements OnInit {

  articles = []

  constructor(private _articleService: ArticleService) { }

  ngOnInit() {
    this._articleService.getEvents()
    .subscribe(
      res => this.articles = res,
      err => console.log(err)
    )
  }

  onPress(id) {
    this._articleService.deleteArticle()
    .subscribe (
      data => {
        console.log("hello");
      }
    );
  }
}

Я создал службу article.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ArticleService {
  private _deleteUrl = "http://localhost:3000/api/delete/:id";
  constructor(private http: HttpClient) { }    
  getAllArticles() {
    ...
  }

  deleteArticle(id) {
    return this.http.delete<any>(this._deleteUrl);
  }
}

А вот мой api.js

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const Article = require('../models/article');
const dbstring = ...


mongoose.connect(dbstring, { useNewUrlParser: true }, err => {
  ...
})

router.delete('/delete/:id', (req, res) => {
  let articleData=req.params.id;

  console.log(articleData); //Output: {}
  console.log('on delete url '+articleData); //Output: on delete url undefined

  Article.deleteOne({articleid: articleData}, (error, article) => {
    if(error) {
      console.log(error)
    }
    else {
      if(!article) {
        res.status(401).send('Something went wrong')
      }
      else {
        //res.json(article);
      }
    }
  })
})

module.exports = router;

Хорошо, не пишите код для меня, но, пожалуйста, по крайней мере, расскажите мне некоторые учебные материалы.

1 Ответ

0 голосов
/ 22 сентября 2019

Хорошо.Я проводил все больше и больше исследований и выяснил проблему.Вот изменения.

api.js

router.delete('/delete/:id', (req, res) => {
  let articleId=req.params.id;
  Article.deleteOne({articleid: articleId}, (error, article) => {
    if(error) {
      console.log(error)
    }
    else {
      if(!article) {
        ...
      }
      else {
        ...            
      }
    }
  })
})

и article.service.ts private _deleteUrl = "http://localhost:3000/api/delete";

deleteArticle метод должен быть.

deleteArticle(id) {
    return this.http.delete<any>(this._deleteUrl+'/'+id);
}
...