nodejs 学习记录(三)-mime模块学习

来源:互联网 发布:b超三个数据看男女技巧 编辑:程序博客网 时间:2024/05/29 02:15

引至https://www.npmjs.com/package/mime

mime

一个全面的,规整MIME类型的模块。

版本二是版本一的一个转折点,具体的变更如下:

ES6兼容但是要求node的版本要大于6,这可以算得上是一个巨大的改变,除此之外,有些对应的接口方法也做了些修改,如:

lookup() 被getType()替换,

extension() 被getExtension() 方法替换

charset() 方法被load() 方法替换


如果您依旧喜欢这个旧版本,点击查看版本一的文档

npm 安装mime模块

npm install mime

入门案例

const mime = require("mime");

mime.getType(“text”);

mime.getExtension("text/plain");


mime api 的其他接口详解请往下看:

精简版(lite)

这个模块还有一个“精简”版本,它省略特定于供应商的(/vnd)和实验性的(/x-)类型。精简的版本仅为2.5 KB,而源版本为8KB。具体的调用代码如下:

const liteMime = require("mime/lite");


浏览器版(browser)

要在浏览器中使用这个模块,您可以使用webpack或浏览器来打包您的代码。但是,浏览器就绪的版本可以通过wzrd.d提供。具体的调用方式如下:

<script src="http://wzrd.in/standalone/mime@latest"></script>

也可以使用精简版本调用,调用的方式如下:

<script src="http://wzrd.in/standalone/mime%2flite@latest"></script>

<!-- 调用mime的api -->

<script>
mime.getType(...); // etc.
</script> 

Mime 、mime-types、 mime-db 三大功能模块对比


mime-db:是MIME类型信息的“真正来源”。它不是一个API。相反,它是由nodejs社区从IANA、Apache、NGINX提取出来的一套规范数据集。

mime-types:是一个围绕mime-db的瘦包装器,它提供了一个与mime兼容(ish)的API,但是仅支持node1.3.6 版本以下的API。

mime:就像node第二版一样,它是一个自包含的模块,它与预优化版本的mime-db数据集绑定在一起。它提供了一个简化的API,具有以下特征:

1、内部一致的类型扩展映射。例如,mime.getType(mime.getextension(type))==类型总是正确的
2、与行业最佳实践相一致的命名方式
3、各种模块的大小比较:

module      size

mime-db     18kb

mime-types  18kb

mime         8kb

mime/lite   2kb   


MIME API

require("mime")和require("mime/lite")返回的都是mime 类型的实例,实例如下:

new mime(typeMap,...more map)

这个模块的大多数用户不需要直接创建mime实例。但是,如果您想要创建自定义映射,您可以这样做:

// 引入mime 模块
const Mime = require('mime/Mime');
 
// 定义映射类型
const typeMap = {
  'text/abc': ['abc', 'alpha', 'bet'],
  'text/def': ['leppard']
};
 
// 使用mime实例
const myMime = new Mime(typeMap);
myMime.getType('abc');          
myMime.getExtension('text/def');  


mime.getType(pathOrExtension)

获取给定路径或扩展的mime类型。如:

mime.getType('js');             // ⇨ 'application/javascript'
mime.getType('json');           // ⇨ 'application/json'
 
mime.getType('txt');            // ⇨ 'text/plain'
mime.getType('dir/text.txt');   // ⇨ 'text/plain'
mime.getType('dir\\text.txt');  // ⇨ 'text/plain'
mime.getType('.text.txt');      // ⇨ 'text/plain'
mime.getType('.txt');           // ⇨ 'text/plain'

在未检测到或识别扩展的情况下返回null:

mime.getType('foo/txt');        // ⇨ null
mime.getType('bogus_type');     // ⇨ null

mime.getExtension(type)
获得给定mime类型的扩展名。Charset选项(通常包括在content-type头部中)被忽略。


mime.getExtension('text/plain');               // ⇨ 'txt'
mime.getExtension('application/json');         // ⇨ 'json'
mime.getExtension('text/html; charset=utf8');  // ⇨ 'html'
 
mime.define(typeMap[, force = false])
定义更多类型的映射
类型映射是一种类型-扩展的映射,如在上面的新Mime中所记录的那样。
默认情况下,如果您试图将一个类型映射到另一个类型的扩展,那么这个方法将会抛出一个错误。传递true对于force参数将会抑制该行为(覆盖之前的映射)。
mime.define({'text/x-abc': ['abc', 'abcd']});
 
mime.getType('abcd');            // ⇨ 'text/x-abc'
mime.getExtension('text/x-abc')  // ⇨ 'abc'

原创粉丝点击