错误状态:使用 Node.js (express)、Angular 和 MongoDB 的 PUT 请求返回 404
Posted
技术标签:
【中文标题】错误状态:使用 Node.js (express)、Angular 和 MongoDB 的 PUT 请求返回 404【英文标题】:Error status: 404 returned with PUT request using Node.js (express), Angular, and MongoDB 【发布时间】:2020-10-21 09:21:35 【问题描述】:我真的很想弄清楚如何将我的数据(“发布”)更新到 MongoDB(我使用的是 Mongoose、MongoDB、Node、Express 和 Angular 9.1.1)。我对 POST 和 DELETE 没有任何问题,但不知道 PUT 哪里出了问题。
在此先感谢,非常感谢所有帮助 -Geoff
角度:文件 post.ts
export class Post
id: string;
title: string;
message: string;
角度:文件postsService.ts
//Working OK
deletePost(postId: string)
this.http.delete(`http://localhost:3000/api/posts/$postId`)
.subscribe(() =>
const updatedPosts = this.posts.filter(post => post.id !== postId);
this.posts = updatedPosts;
this.postsUpdate$.next([...this.posts]);
);
//Not working - I want to update one post
updatePost(postId: string, postTitle: string, postMessage: string)
const post: Post = id: postId, title: postTitle, message: postMessage ;
this.http.put(`http://localhost:3000/api/posts/$postId`, post)
.subscribe(response => console.log(response));
节点服务器:文件 backend/app.js
// Working OK
app.delete("/api/posts/:id", (req, res, next) =>
Post.deleteOne( _id: req.params.id ).then((result) =>
console.log(req.params.id);
res.status(200).json( msg: "Post deleted successfully!" );
);
);
//Not working - I want to update one post
// Post is defined in file: backend/model/post.js
app.put("/api/post/:id", (req, res, next) =>
const post1 = new Post(
_id: req.body.id,
title: req.body.title,
message: req.body.message,
);
Post.findOneAndUpdate( _id: req.params.id ,post1)
.then((result) =>
console.log(result);
res.status(200).json( msg: "Updated successfully!" );
);
);
节点:后端/模型/post.js
const mongoose = require("mongoose");
//note "String is a class used in node/mongoDB"
const postSchema = mongoose.Schema(
title: type: String, required: true ,
message: type: String, required: true ,
);
// this will automaticly be stored in collection "posts"
module.exports = mongoose.model('Post', postSchema);
浏览器错误:
// HEADERS:
Request URL:http://localhost:3000/api/posts/5ef676c71105924a08b9e919
Request Method:PUT
Remote Address:127.0.0.1:3000
Status Code:
404
Version:HTTP/1.1
Referrer Policy:strict-origin-when-cross-origin
// REQUEST:
Request Payload:
"id":"5ef676c71105924a08b9e919", "title":"first Post ", "message":"This is just some text"
// RESPONCE:
Cannot PUT /api/posts/5ef676c71105924a08b9e919
但是在获取 URL 时一切正常:
"msg":"Post fetched successfully!","posts":"_id":"5ef676c71105924a08b9e919","title":"first Post ","message":"This is just some text","__v":0
【问题讨论】:
【参考方案1】:您的 api put 请求指向错误的 url 角度
this.http.put(`http://localhost:3000/api/posts/$postId`, post)
后端
app.put("/api/post/:id", (req, res, next) =>
一个是发布另一个它的帖子。它们必须相同。
【讨论】:
非常感谢 - 就是这样 - 请注意,不要让程序感到疲倦 ;) 不客气。像这样的东西几乎总是一个你看不到的错字,因为你知道应该有什么,所以你看不到那里有什么。干杯队友【参考方案2】:您似乎正在尝试更新一篇帖子的记录,因此您可以简单地尝试一下
router.put('/api/post/:id', async (req, res, next) =>
return Post.updateOne(
_id: req.params.id
,
$set:
title: req.body.title,
message: req.body.message
)
.then(result => res.json(result))
.catch(err => console.log(err))
);
无需创建新帖子,因为您正在尝试根据 id
更新现有记录,并且您正在发送类似 api/post
的路由路径,但您收到来自服务器 api/posts
的响应所以也要检查你的路线。
【讨论】:
路径不匹配。感谢您显示带有错误处理的完整代码。我会试试的以上是关于错误状态:使用 Node.js (express)、Angular 和 MongoDB 的 PUT 请求返回 404的主要内容,如果未能解决你的问题,请参考以下文章
将 Node.js 的 Express 与 vhost 一起使用时出现意外错误
从 POST 访问中隐藏 Node.js&Express 中的错误消息