mirror of
https://github.com/linuxserver/core.git
synced 2026-02-20 05:07:19 +08:00
59 lines
1.2 KiB
JavaScript
59 lines
1.2 KiB
JavaScript
/*!
|
|
* Connect - methodOverride
|
|
* Copyright(c) 2010 Sencha Inc.
|
|
* Copyright(c) 2011 TJ Holowaychuk
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var methods = require('methods');
|
|
|
|
/**
|
|
* Method Override:
|
|
*
|
|
* Provides faux HTTP method support.
|
|
*
|
|
* Pass an optional `key` to use when checking for
|
|
* a method override, otherwise defaults to _\_method_.
|
|
* The original method is available via `req.originalMethod`.
|
|
*
|
|
* @param {String} key
|
|
* @return {Function}
|
|
* @api public
|
|
*/
|
|
|
|
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();
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Check if node supports `method`.
|
|
*/
|
|
|
|
function supports(method) {
|
|
return ~methods.indexOf(method);
|
|
}
|