首页 > 解决方案 > 我看不出 put 和 patch 方法之间的区别

问题描述

如果我已经喜欢这句话,我只想喜欢或不喜欢。所以首先我找到报价,然后我检查我是否已经喜欢报价,如果不喜欢,那么我喜欢,否则我不喜欢。

我有一个像下面这样的路由器

router.put('/:quoteId', isAuth, quotesController.likeQuote);

而likeQuote方法如下

module.exports.likeQuote = (req, res, next) => {
  const quoteId = req.params.quoteId;
  const userId = req.userId;
  Quote.findById(quoteId)
    .then((quote) => {
      if (quote.likes.indexOf(userId) == -1) {
        quote.likes.push(userId);
      } else {
        quote.likes.pull(userId);
      }
      return quote.save();
    })
    .then((updatedQuote) => {
      res.status(201).json({ message: 'You liked the post!' });
    })
    .catch((err) => {
      err.statusCode = 500;
      next(err);
    });

但我的问题是,我只想知道PUTPATCH是如何工作的?我认为我们应该在 PUT 中发送所有字段,而不是在 PATCH 方法中发送,但在我的情况下,我什至不发送任何字段并且两者都可以正常工作。这是怎么发生的?

标签: node.jsmongodbrestmongoosenodejs-server

解决方案


实际的 REST API 方法 ( PUT, PATCH, ... ) 没有任何限制。您选择编写的逻辑就是定义这一点的原因。现在你问的是“最佳实践”,每当你问这个问题时,你都会得到许多不同的答案。我将解释我的观点。

PUT,所以本质PUT是完全替换现有对象,这就是为什么人们告诉您发送整个对象,因为当您使用时PUT,预期的是完全交换。

PATCH,本质PATCH是更新现有资源。这就是您要查找的内容,在这种情况下,您只需发送更新所需的必填字段。

现在,如果您写PUT的是更新而不是完整的交换,这是错误的吗?我认为不是。只要您在整个应用程序中保持一致的逻辑,您就可以构建适合您需求的自己的“最佳实践”。

现在您确实将这个问题标记为Mongo相关,所以我想向您介绍管道更新的概念(对于 Mongo v4.2+),您可以在其中执行您的逻辑在 1 次更新中。

蒙戈游乐场


推荐阅读