refactor: move .is to type-is
This commit is contained in:
parent
7fe4133b4a
commit
20615b808d
3 changed files with 12 additions and 63 deletions
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
var debug = require('debug')('koa:context');
|
var debug = require('debug')('koa:context');
|
||||||
var qs = require('querystring');
|
var qs = require('querystring');
|
||||||
|
var typeis = require('type-is');
|
||||||
var fresh = require('fresh');
|
var fresh = require('fresh');
|
||||||
var mime = require('mime');
|
|
||||||
var url = require('url');
|
var url = require('url');
|
||||||
var parse = url.parse;
|
var parse = url.parse;
|
||||||
var stringify = url.format;
|
var stringify = url.format;
|
||||||
|
@ -486,38 +486,9 @@ module.exports = {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
is: function(types){
|
is: function(types){
|
||||||
// no request body
|
if (!types) return typeis(this.req);
|
||||||
if (!(this.length || 'transfer-encoding' in this.header)) return;
|
|
||||||
|
|
||||||
var ct = this.type;
|
|
||||||
// no content-type
|
|
||||||
if (!ct) return false;
|
|
||||||
|
|
||||||
// paramless
|
|
||||||
ct = ct.split(';')[0];
|
|
||||||
|
|
||||||
if (!types) return ct;
|
|
||||||
|
|
||||||
// ensure array
|
|
||||||
if (!Array.isArray(types)) types = [].slice.call(arguments);
|
if (!Array.isArray(types)) types = [].slice.call(arguments);
|
||||||
|
return typeis(this.req, types);
|
||||||
var mt;
|
|
||||||
for (var i = 0; i < types.length; i++) {
|
|
||||||
var type = types[i];
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case 'urlencoded':
|
|
||||||
mt = 'application/x-www-form-urlencoded';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
mt = ~type.indexOf('/') ? type : mime.lookup(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mimeMatch(mt, ct)) return ct;
|
|
||||||
}
|
|
||||||
|
|
||||||
// no matches
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -592,27 +563,4 @@ module.exports = {
|
||||||
header: this.header
|
header: this.header
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if `exected` mime type
|
|
||||||
* matches `actual` mime type with
|
|
||||||
* wildcard support.
|
|
||||||
*
|
|
||||||
* @param {String} expected
|
|
||||||
* @param {String} actual
|
|
||||||
* @return {Boolean}
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
|
|
||||||
function mimeMatch(expected, actual) {
|
|
||||||
if (expected == actual) return true;
|
|
||||||
|
|
||||||
if (!~expected.indexOf('*')) return false;
|
|
||||||
|
|
||||||
actual = actual.split('/');
|
|
||||||
expected = expected.split('/');
|
|
||||||
|
|
||||||
if ('*' == expected[0] && expected[1] == actual[1]) return true;
|
|
||||||
if ('*' == expected[1] && expected[0] == actual[0]) return true;
|
|
||||||
}
|
|
|
@ -22,6 +22,7 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"accepts": "~1.0.0",
|
"accepts": "~1.0.0",
|
||||||
|
"type-is": "~1.0.0",
|
||||||
"on-socket-error": "~1.0.1",
|
"on-socket-error": "~1.0.1",
|
||||||
"co": "~3.0.1",
|
"co": "~3.0.1",
|
||||||
"debug": "*",
|
"debug": "*",
|
||||||
|
|
|
@ -49,8 +49,8 @@ describe('ctx.is(type)', function(){
|
||||||
ctx.header['content-type'] = 'image/png';
|
ctx.header['content-type'] = 'image/png';
|
||||||
ctx.header['transfer-encoding'] = 'chunked';
|
ctx.header['transfer-encoding'] = 'chunked';
|
||||||
|
|
||||||
ctx.is('png').should.equal('image/png');
|
ctx.is('png').should.equal('png');
|
||||||
ctx.is('.png').should.equal('image/png');
|
ctx.is('.png').should.equal('.png');
|
||||||
ctx.is('image/png').should.equal('image/png');
|
ctx.is('image/png').should.equal('image/png');
|
||||||
ctx.is('image/*').should.equal('image/png');
|
ctx.is('image/*').should.equal('image/png');
|
||||||
ctx.is('*/png').should.equal('image/png');
|
ctx.is('*/png').should.equal('image/png');
|
||||||
|
@ -69,8 +69,8 @@ describe('ctx.is(type)', function(){
|
||||||
ctx.header['content-type'] = 'image/png';
|
ctx.header['content-type'] = 'image/png';
|
||||||
ctx.header['transfer-encoding'] = 'chunked';
|
ctx.header['transfer-encoding'] = 'chunked';
|
||||||
|
|
||||||
ctx.is('png').should.equal('image/png');
|
ctx.is('png').should.equal('png');
|
||||||
ctx.is('.png').should.equal('image/png');
|
ctx.is('.png').should.equal('.png');
|
||||||
ctx.is('text/*', 'image/*').should.equal('image/png');
|
ctx.is('text/*', 'image/*').should.equal('image/png');
|
||||||
ctx.is('image/*', 'text/*').should.equal('image/png');
|
ctx.is('image/*', 'text/*').should.equal('image/png');
|
||||||
ctx.is('image/*', 'image/png').should.equal('image/png');
|
ctx.is('image/*', 'image/png').should.equal('image/png');
|
||||||
|
@ -89,9 +89,9 @@ describe('ctx.is(type)', function(){
|
||||||
ctx.header['content-type'] = 'application/x-www-form-urlencoded';
|
ctx.header['content-type'] = 'application/x-www-form-urlencoded';
|
||||||
ctx.header['transfer-encoding'] = 'chunked';
|
ctx.header['transfer-encoding'] = 'chunked';
|
||||||
|
|
||||||
ctx.is('urlencoded').should.equal('application/x-www-form-urlencoded');
|
ctx.is('urlencoded').should.equal('urlencoded');
|
||||||
ctx.is('json', 'urlencoded').should.equal('application/x-www-form-urlencoded');
|
ctx.is('json', 'urlencoded').should.equal('urlencoded');
|
||||||
ctx.is('urlencoded', 'json').should.equal('application/x-www-form-urlencoded');
|
ctx.is('urlencoded', 'json').should.equal('urlencoded');
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
Loading…
Reference in a new issue