该软件包将将MIME类型解析为结构化格式,然后可以操纵和序列化:
const MIMEType = require ( "whatwg-mimetype" ) ;
const mimeType = new MIMEType ( `Text/HTML;Charset="utf-8"` ) ;
console . assert ( mimeType . toString ( ) === "text/html;charset=utf-8" ) ;
console . assert ( mimeType . type === "text" ) ;
console . assert ( mimeType . subtype === "html" ) ;
console . assert ( mimeType . essence === "text/html" ) ;
console . assert ( mimeType . parameters . get ( "charset" ) === "utf-8" ) ;
mimeType . parameters . set ( "charset" , "windows-1252" ) ;
console . assert ( mimeType . parameters . get ( "charset" ) === "windows-1252" ) ;
console . assert ( mimeType . toString ( ) === "text/html;charset=windows-1252" ) ;
console . assert ( mimeType . isHTML ( ) === true ) ;
console . assert ( mimeType . isXML ( ) === false ) ;
解析是一个相当复杂的过程。有关详细信息,请参见规范(类似于序列化)。
该软件包的算法符合Whatwg Mime嗅探标准的算法,并与提交8E9A7DD保持一致。
MIMEType
API该软件包的主模块的默认导出是MIMEType
类。它的构造函数采用了一个将试图将其解析为MIME类型的字符串;如果解析失败,将丢弃Error
。
parse()
静态工厂方法作为构造函数的替代方案,您可以使用MIMEType.parse(string)
。唯一的区别是parse()
将在解析失败时返回null
,而构造函数将投掷。因此,在无可避免的MIME类型异常的情况下,使用构造函数是最有意义的,并且在处理来自某些无约束源的输入时使用parse()
。
type
:MIME类型的类型,例如"text"
subtype
:MIME类型的亚型,例如"html"
essence
:哑剧类型的本质,例如"text/html"
parameters
: MIMETypeParameters
的实例,包含此MIME类型的参数可以更改type
和subtype
。它们将被验证为非空的,仅包含HTTP代码点。
essence
只是一个收获,不能改变。
parameters
也是一个getter,但是MIMETypeParameters
对象的内容是可变的,如下所述。
toString()
将MIME类型序列到字符串isHTML()
:如果此实例代表HTML MIME类型,则返回trueisXML()
:如果此实例表示XML MIME类型,则返回trueisJavaScript({ prohibitParameters })
:如果此实例代表JavaScript MIME类型,则返回true。可以将prohibitParameters
设置为true以禁止任何参数,即测试MIME类型的序列化是否是JavaScript Mime类型的本质匹配。注意: isHTML()
, isXML()
和isJavaScript()
方法是投机性的,可以在将来的主要版本中删除或更改。有关该领域的集思广益,请参见Whatwg/Mimesniff#48。目前,我们实施这些主要是因为它们在JSDOM中很有用。
MIMETypeParameters
API MIMETypeParameters
类,其实例由mimeType.parameters
返回,具有等效的表面API与Map
aScript映射。
但是, MIMETypeParameters
方法将始终将其参数解释为适用于MIME类型的参数,例如,参数名称将较低,并尝试设置无效字符。
一些例子:
const mimeType = new MIMEType ( `x/x;a=b;c=D;E="F"` ) ;
// Logs:
// a b
// c D
// e F
for ( const [ name , value ] of mimeType . parameters ) {
console . log ( name , value ) ;
}
console . assert ( mimeType . parameters . has ( "a" ) ) ;
console . assert ( mimeType . parameters . has ( "A" ) ) ;
console . assert ( mimeType . parameters . get ( "A" ) === "b" ) ;
mimeType . parameters . set ( "Q" , "X" ) ;
console . assert ( mimeType . parameters . get ( "q" ) === "X" ) ;
console . assert ( mimeType . toString ( ) === "x/x;a=b;c=d;e=F;q=X" ) ;
// Throws:
mimeType . parameters . set ( "@" , "x" ) ;
如果您想要构建自己的API的原语,则可以直接访问解析和序列化算法,如下所示:
const parse = require ( "whatwg-mimetype/parser" ) ;
const serialize = require ( "whatwg-mimetype/serialize" ) ;
parse(string)
返回一个包含type
和subtype
字符串的对象,以及parameters
,即Map
。这大致相当于规格的MIME类型记录。如果解析失败,则它将返回null
。
serialize(record)
在这样的对象上运行,根据序列化算法回馈字符串。