48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
/*!
|
||
|
* Connect - methodOverride
|
||
|
* Copyright(c) 2010 Sencha Inc.
|
||
|
* Copyright(c) 2011 TJ Holowaychuk
|
||
|
* MIT Licensed
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Module dependencies.
|
||
|
*/
|
||
|
|
||
|
var deprecate = require('depd')('connect');
|
||
|
var methodOverride = require('method-override');
|
||
|
|
||
|
/**
|
||
|
* Method Override:
|
||
|
*
|
||
|
* See [method-override](https://github.com/expressjs/method-override)
|
||
|
*
|
||
|
* @param {String} key
|
||
|
* @return {Function}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
module.exports = function(key){
|
||
|
// this is a shim to keep the interface working with method-override@2
|
||
|
var opts = { methods: null };
|
||
|
var prop = key || '_method';
|
||
|
var _headerOverride = methodOverride('X-HTTP-Method-Override', opts);
|
||
|
var _bodyOverride = methodOverride(function(req){
|
||
|
if (req.body && typeof req.body === 'object' && prop in req.body) {
|
||
|
var method = req.body[prop];
|
||
|
delete req.body[prop];
|
||
|
return method;
|
||
|
}
|
||
|
}, opts);
|
||
|
|
||
|
return function(req, res, next){
|
||
|
_bodyOverride(req, res, function(err){
|
||
|
if (err) return next(err);
|
||
|
_headerOverride(req, res, next);
|
||
|
});
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = deprecate.function(module.exports,
|
||
|
'methodOverride: use method-override npm module instead');
|