Какова роль промежуточного программного обеспечения для переопределения метода в 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);
}