// gettet 可以是一个自定义的function 或者是string
// function : 可以获取req.body中的数据 找到需要重写的方法(key--value),返回value。
// string : 以X-开头,那么这个key--value在req.header中设置
// string : 其他,那么这个key--value在req.url中设置
// 由于以上原因,method-override 需要放在 body-parser 之后
// options指定需要被改写的方法 比如 {method:['DELETE','POST']}等等
module.exports = function methodOverride(getter, options){
options = options || {}
// get the getter fn
var get = typeof getter === 'function'
? getter
: createGetter(getter || 'X-HTTP-Method-Override')
// get allowed request methods to examine
var methods = options.methods === undefined
? ['POST']
: options.methods
return function methodOverride(req, res, next) {
var method
var val
req.originalMethod = req.originalMethod || req.method
//
// validate request is an allowed method
// 用来判断这个请求是否属于需要被改写的范畴
if (methods && methods.indexOf(req.originalMethod) === -1) {
return next()
}
// 获得改写的目的方法
val = get(req, res)
method = Array.isArray(val)
? val[0]
: val
// replace
if (method !== undefined && supports(method)) {
req.method = method.toUpperCase()
debug('override %s as %s', req.originalM
Express中method-override模块详解(一): 源码
最新推荐文章于 2024-09-01 07:13:24 发布
本文详细解析了Express中的method-override模块,重点探讨了HTTP VARY头的作用。内容协商机制在HTTP中用于选择最合适的内容版本,VARY头在内容依赖于非标准请求头如User-Agent时至关重要,防止缓存错误。method-override允许修改HTTP头部,使缓存服务器能正确处理请求。
摘要由CSDN通过智能技术生成