问题描述
我想创建可以执行CRUD的服务器。
电影模型只有1个名为title的属性。
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);
})
});