首页 > 解决方案 > app.patch() 不工作。get 和 delete 工作但不补丁。是否有任何编码错误我做错了什么?

问题描述

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

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

我可以创建新电影,删除电影并通过_id搜索电影。但是更新不起作用。所以,我在下面显示了代码

1.GET和DELETE我已经在邮递员上测试过并且工作正常。

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

2.PATCH 请求不起作用。

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

本地主机:3000/电影/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',(req,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',(req,res)=>{
    console.log(req.body);
    Movie.findByIdAndUpdate({
        _id:req.params.id
    },{
        $set:req.body
    }).then(()=>{
        res.sendStatus({message:"success"});
    });
});

app.delete('/movies/:id',(req,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

标签: javascriptnode.jsapiexpresspatch

解决方案


您的快速代码看起来不错,可能是您的 mongoose 查询遇到了您当前未处理的错误。节点将遇到一个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);
    })
});

推荐阅读