app.patch无法正常工作get和delete无法正常工作,但无法正常工作是否存在任何编码错误?我在做什么错了?

问题描述

我想创建可以执行CRUD的服务器。

电影模型只有1个名为title的属性

我能够创建新电影,删除电影并通过其_id搜索电影。但是更新无法正常进行。因此,我在下面显示代码

1.GET和DELETE我已经对邮递员进行了测试,并且可以正常工作。

[正如我说的,get正在工作] [1]

2.PATCH请求不起作用。

它甚至没有给出任何响应,而只是加载。

localhost:3000 / movies / id_of_movie

此处id_of_movie是要更新的电影的ID。

const express=require('express');

const  {mongoose}=require('./db/mongoose');

const bodyParser=require('body-parser');

const {Movie}=require('./db/models');

const app=express();

//middleware
app.use(bodyParser.json());
app.use(function(req,res,next) {
    res.header("Access-Control-Allow-Origin","*"); // update to match the domain you will make the request from
    res.header("Access-Control-Allow-Methods","GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE"); 
    res.header("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept");
    next();
  });
/* route handlers */
app.get('/movies',(req,res)=>{
    Movie.find({}).then((movies)=>{
        res.send(movies);
    });
});

app.post('/movies',res)=>{
    let title=req.body.title;

    let newMovie=new Movie({
        title
    });
    newMovie.save().then((movieDoc)=>{
        res.send(movieDoc);
    });
});

app.get('/',( req,res )=>{
    res.send("hello");
});

app.patch('/movies/:id',res)=>{
    console.log(req.body);
    Movie.findByIdAndUpdate({
        _id:req.params.id
    },{
        $set:req.body
    }).then(()=>{
        res.sendStatus({message:"success"});
    });
});

app.delete('/movies/:id',res)=>{
    Movie.findOneAndRemove({
        _id:req.params.id
    }).then((removedMovieDoc)=>{
        res.send(removedMovieDoc);
    });
});
```````````````````````````````````````````````````````


[It is just loading and loading][2]


  [1]: https://i.stack.imgur.com/A6LVa.png
  [2]: https://i.stack.imgur.com/YauA7.png

解决方法

您的快速代码看起来不错,可能是您的猫鼬查询遇到了您当前未处理的错误。节点将运行到UnhandledPromiseRejection中,请求将永远挂起。在您的诺言中添加一个catch处理程序并处理您的错误,例如:

app.patch('/movies/:id',(req,res)=>{
    console.log(req.body);
    Movie.findByIdAndUpdate({
        _id:req.params.id
    },{
        $set:req.body
    }).then(()=>{
        res.sendStatus({message:"success"});
    }).catch(err => {
       res.status(500).send(err.message);
    })
});