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');
|