我正在使用mongoose将具有ID,标题和内容的数据存储在mongodb中。我使用的后端是Express.js,前端是有角度的。我可以成功保存到mongodb中并进行提取。现在我想删除mongodb中的特定文档。
这是我的后端代码:-
const express=require('express');
const bodyparser=require('body-parser');
const app=express();
const mongoose=require('mongoose');
mongoose.connect('mongodb+srv://joeMax:oHjfiewfhi43wuh438y3napor@cluster0-33rpr.mongodb.net/mytest?retryWrites=true',{useNewUrlParser:true})
.then(()=>{
console.log('Database is connected');
})
.catch((err)=>{
console.log('Database Connection is failed',err);
})
const Post=require('./postModel/post');
app.use((req,res,next)=>{
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin,X-Requested-with,Content-Type,Accept");
res.setHeader(
"Access-Control-Allow-Methods",
"GET,POST,PATCH,DELETE,OPTIONS");
next();
})
var headersOpt = {
"content-type": "application/json",
};
app.use(bodyparser.json());
app.post("/api/posts",(req,res,next)=>{
headers:this.headersOpt
const post=new Post({
title:req.body.title,
content:req.body.content
});
post.save();
console.log("The Post is",post);
res.status(201).json({
message:"Sucessfully post"
})
console.log("The Body Tag");
})
app.delete("api/posts/:id",(req,res,next)=>{
console.log('In server Delete Method');
Post.deleteOne({_id:req.params.id})
.then((result)=>{
console.log(result);
})
res.status(200).json({message:'Deleted'});
})
app.use("/api/posts",(req,res,next)=>{
Post.find()
.then((documents)=>{
res.status(200).json({
message:'Sucessfully Fetched in post find method',
post:documents
}) })
})
module.exports=app;
从我的service.ts角度代码中:-
addPosst(title:string,content:string){
const post:Post={id:null,title:title,content:content};
this.http.post<{message:string}>('http://localhost:3000/api/posts',post)
.subscribe((postData)=>{
console.log("The PostData",postData);
this.posts.push(post);
this.postsubscription.next([...this.posts]);
})
}
deletePost(postId:string)
{
console.log('The Postid',postId);
this.http.delete("http://localhost:3000/api/posts/" + postId)
.subscribe((data)=>{
console.log('Deleted ',data);}) }
但是当我单击删除按钮时,它向我显示来自app.js的app.use()消息,而不是显示app.delete()的消息,我无法弄清楚为什么我的路由部分不起作用。 / p>
答案 0 :(得分:0)
在app.delete中,您在uri定义中缺少/。
如果未找到uri,则app.use将用作中间件,这就是执行该段代码的原因。因为传入的uri确实与app.use中间件中定义的uri相匹配。
您也应该将app.use重命名为app.get。