Какова роль промежуточного программного обеспечения для переопределения метода в Express 4?
Так как объект Router
в Express 4 поддерживает:
var router = require('express').Router();
router.delete('/route', function(req, res) {
//...
};
router.put('/route', function(req, res) {
//...
};
Какое использование существует для промежуточного программного обеспечения для переопределения метода? Могу ли я безопасно удалить его из моих app.js
и package.json
?
Ответы
Ответ 1
Связующее средство methodOverride()
предназначено для запросов клиентов, которые поддерживают только простые глаголы, такие как GET и POST. Таким образом, в этих случаях вы можете указать специальное поле запроса (например, поле скрытой формы), которое указывает на использование реального глагола вместо того, что было первоначально отправлено. Таким образом, ваш backend .put()
/.delete()
/.patch()
/etc. маршруты не должны меняться и будут работать, и вы можете принимать запросы от всех клиентов.
Ответ 2
Обеспечивает поддержку искусственного HTTP-метода.
Передайте необязательный ключ для использования при проверке переопределения метода, в противном случае по умолчанию используется _method. Оригинальный метод доступен через req.originalMethod.
- Строковый ключ
- Функция возврата
Источник
module.exports = function methodOverride(key){
key = key || "_method";
return function methodOverride(req, res, next) {
var method;
req.originalMethod = req.originalMethod || req.method;
// req.body
if (req.body && typeof req.body === 'object' && key in req.body) {
method = req.body[key].toLowerCase();
delete req.body[key];
}
// check X-HTTP-Method-Override
if (req.headers['x-http-method-override']) {
method = req.headers['x-http-method-override'].toLowerCase();
}
// replace
if (supports(method)) req.method = method.toUpperCase();
next();
};
};
Опоры()
Проверьте, поддерживает ли узел метод.
Источник
function supports(method) {
return ~methods.indexOf(method);
}