Mongodb Node js连接

时间:2018-12-18 16:52:25

标签: node.js mongodb

我正在使用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>

1 个答案:

答案 0 :(得分:0)

在app.delete中,您在uri定义中缺少/。

如果未找到uri,则app.use将用作中间件,这就是执行该段代码的原因。因为传入的uri确实与app.use中间件中定义的uri相匹配。

您也应该将app.use重命名为app.get。