Express.js的PUT请求没有更新MongoDB。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Express.js的PUT请求没有更新MongoDB。相关的知识,希望对你有一定的参考价值。

我正在做一个项目,基本上是一个超级淡化的社交媒体网站。

我已经完成了一部分,但是在创建一个put请求到我的mongodb时遇到了一些问题。基本上,我想发送一个put请求来更新一个数值,以便在每篇文章中都有一个like计数器。

我现在要做的是发送一个带有特定帖子id的put请求。我把帖子的id存储在一个隐藏的文本框中,以便引用它。这是pug格式的html

input.form-control(type='hidden' value=item.id id='postId' placeholder='' name='postId' required='false')
      form(method='PUT' action='/update/{{post._id}}')
        button(type='submit') Like

然后在我的 router.js 文件中,我基本上是想把这个 id 收录进来,然后把 Post schema 中的 likes 字段设置为 1(只是为了测试)。

router.put('/update/:id', function (req, res, next) {
    let id = {
      _id: ObjectID(req.params.id)
    };

    Post.update({_id: id}, {$set:{'likes': 1}}, (err, result) => {
      if(err) {
        throw err;
      }
      res.send('user updated sucessfully');
    });
});

以下是我的文章模式

var mongoose = require("mongoose");

var PostSchema = new mongoose.Schema({
  postText: {
    type: String,
    unique: false,
    required: true,
    trim: true
  },
  usernameText: {
    type: String,
    unique: false,
    required: true,
    trim: true
  },
  likes:{
    type: Number,
    unique: false,
    required: false
  }
});


var Post = mongoose.model("Posts", PostSchema);
module.exports = Post;

衷心感谢您的帮助,谢谢您

答案

你不能改变ObjectId。ObjectId是由MongoDB生成的,用户不能使用查询函数更改。

例如,如果你想给每个用户分配一个唯一的ID,那么在你的模式中创建一个单独的字段。

另一答案
  1. 你不能改变ID
  2. 据我所知,'PUT'方法不直接支持。你需要方法覆盖

以上是关于Express.js的PUT请求没有更新MongoDB。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mongoose 在 AngularJS 中创建 PUT 函数

无法使用 Express.js 从请求中获取 POST 正文

Express 无法 PUT/DELETE 方法。出了啥问题?

Express.js 响应超时

MERN API 请求,不知道如何发出 put 请求并正确更新

在express.js中间件请求中获取“#”之后的url