javascript - 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
解决方案
您的快速代码看起来不错,可能是您的 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);
})
});
推荐阅读
- flutter - 水平 ListView 内的动画小部件
- php - 简单的 PHP 上传到 Google Compute Engine VM(实例)不起作用
- python - 未指定协议:无法连接到 X 服务器
- windows - “使用 VirtualFn1_t = void(__thiscall*)(void* thisptr);”是什么意思 在 C++ 中是什么意思?
- jenkins - 如何从 yaml 中获取变量并将它们映射到 jenkinsfile 中?
- ruby-on-rails - Rails 系统测试驱动程序我还能使用 rack_test 吗?
- php - Laravel Nova 无法工作/出现在 nova 路线上
- javascript - 模拟按键进入输入字段(Javascript)
- python - 在 Anaconda 中使用 Spyder 使用 pandas_datareader.data 时出现导入错误
- python - 在 Tensorflow 对象识别结果中显示“N/A”的标签