为什么 angular-fullstack 对 express 同时使用 put 和 patch 请求?
Why does angular-fullstack use both put and patch requests for express?
我找到了 Difference between put and patch。我有点理解阅读后的区别。还是雾蒙蒙的
我的问题是:
为什么 Yeoman 生成器:angular fullstack 使用
router.put('/:id', controller.update);
AND
router.patch('/:id', controller.update);
他们 server.collections?
的 index.js 个文件
两者兼而有之的目的是什么?此外,我将如何使用一个与另一个?
'use strict';
var express = require('express');
var controller = require('./thing.controller');
var router = express.Router();
router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.patch('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;
服务器控制器
// Updates an existing thing in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Thing.findById(req.params.id, function (err, thing) {
if (err) { return handleError(res, err); }
if(!thing) { return res.send(404); }
var updated = _.merge(thing, req.body);
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, thing);
});
});
};
它们只是不同的 http 动词。阅读 https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
PUT
Requests that the enclosed entity be stored under the supplied URI. If the URI refers
to an already existing resource, it is modified; if the URI does not point to an existing
resource, then the server can create the resource with that URI.[15]
PATCH
Applies partial modifications to a resource.[18]
他们应该是一样的!
但我认为 angular-fullstack 上的两种方法没有区别,对我来说 错误 !
- PUT - 更新整个实体,这意味着您需要发送每个
单个 属性 项,否则它们将被删除。
- PATCH - 部分更新,您可以只发送您想要的字段
更改,其他将保留在服务器上。
例如:
想象以下实体:
car: {
color: red,
year: 2000
}
现在假设您发送这样的补丁:
{color: blue}
实体现在是这样的:
car: {
color: blue, // CHANGED
year: 2000
}
但是如果您发送了一个 put 实体应该是这样的:
car: {
color: blue // CHANGED
year: null // May be null, undefined, removed, etc...
}
我找到了 Difference between put and patch。我有点理解阅读后的区别。还是雾蒙蒙的
我的问题是: 为什么 Yeoman 生成器:angular fullstack 使用
router.put('/:id', controller.update);
AND
router.patch('/:id', controller.update);
他们 server.collections?
的 index.js 个文件两者兼而有之的目的是什么?此外,我将如何使用一个与另一个?
'use strict';
var express = require('express');
var controller = require('./thing.controller');
var router = express.Router();
router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.patch('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;
服务器控制器
// Updates an existing thing in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
Thing.findById(req.params.id, function (err, thing) {
if (err) { return handleError(res, err); }
if(!thing) { return res.send(404); }
var updated = _.merge(thing, req.body);
updated.save(function (err) {
if (err) { return handleError(res, err); }
return res.json(200, thing);
});
});
};
它们只是不同的 http 动词。阅读 https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
PUT
Requests that the enclosed entity be stored under the supplied URI. If the URI refers
to an already existing resource, it is modified; if the URI does not point to an existing
resource, then the server can create the resource with that URI.[15]
PATCH
Applies partial modifications to a resource.[18]
他们应该是一样的!
但我认为 angular-fullstack 上的两种方法没有区别,对我来说 错误 !
- PUT - 更新整个实体,这意味着您需要发送每个 单个 属性 项,否则它们将被删除。
- PATCH - 部分更新,您可以只发送您想要的字段 更改,其他将保留在服务器上。
例如: 想象以下实体:
car: {
color: red,
year: 2000
}
现在假设您发送这样的补丁:
{color: blue}
实体现在是这样的:
car: {
color: blue, // CHANGED
year: 2000
}
但是如果您发送了一个 put 实体应该是这样的:
car: {
color: blue // CHANGED
year: null // May be null, undefined, removed, etc...
}