mime模块响应或设置Node.js的Content-Type头
转载自:https://itbilu.com/nodejs/core/VJYaAfKrl.html
MIME
,即:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型。其主要用途是设置某种扩展名的文件的响应程序类型,我们可以认为是当指定扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。在HTTP中,是通过名为Content-Type
的HTTP头来设置或响应对应的文件类型的。例如:当服务器要向客户端发送的内容图类为.jpg图片,就需要将Content-Type
头设置为image/jpeg
,而客户端同样会根据Content-Type
对服务器内容进行解析。
MIME
和Content-Type
是文件类型设置和解板的标准。当服务器要对某种扩展名文件发送到客户端时,会根据文件扩展名设置Content-Type
头。而客户端(可以认为是浏览器),对服务器内容进行解析时也需要Content-Type
所代表的MIME
找到内容的解析程序。MIME
类型非常多,当我们在服务端设置发送内容格式时或当我们对服务端内容进行解析时,对几百种MIME
类型进行处理工作量会非常巨大。
推荐一个NPM包:mime
。mime
模块使用Apache项目的mime.types
文件,该文件包含了超过600个Content-Type
类型数据,并且支持添加自定义的MIME
类型。
1. mime
安装
mime
模块是一个基于mime-db
的MIME
类型解析及处理程序。
使用npm
安装模块:
npm install mime
安装后,mime
模块测试:
npm run test
mime
模块安装后,可以命令行下使用(命令行下使用需要npm install -g
全局安装),格式如下:
mime [path_string]
如,mime
模块查看当前目录下app.js
文件的类型:
mime app.js
//application/javascript
2. mime
模块的查询API
通过mime
模块可以通过文件及其扩展查询与文件关联的MIME
类型,也可以通过MIME
类型反向查找文件的扩展名。
2.1 查询文件的类型mime.lookup(path)
使用mime
模块查询文件的MIME
类型:
var mime = require('mime'); mime.lookup('/path/to/file.txt'); // => 'text/plain'
mime.lookup('file.txt'); // => 'text/plain'
mime.lookup('.TXT'); // => 'text/plain'
mime.lookup('htm'); // => 'text/html'
mime.default_type
返回默认类型
当通过mime.lookup()
查找的文件MIME
类型不存在时会返回application/octet-stream
类型。mime.lookup()
查找的文件时路径不区分大小写。可以通过mime.default_type
返回当前使用的默认类型。
2.2 查询文件护展名mime.extension(type)
mime
模块提供了查询文件扩展名的方法,我们可以通过Content-Type
所表示的MIME
类型查找到文件的扩展名,并最终确认内容解析形式和解析程序。
mime.extension('text/html'); // => 'html'
mime.extension('application/octet-stream'); // => 'bin'
2.3 查找类型编码mime.charsets.lookup()
通过mime
模块可以查询MIME
类型所使用的编码:
mime.charsets.lookup('text/plain'); // => 'UTF-8'
3. mime
自定义类型
当mime
模块自带的mime-db
库不存在或不能满足我们所需的MIME
类型时,还可以自定义MIME
类型。
3.1 自定义类型mime.define()
mime.define(obj)
该方法接受一个参数obj
,是一个表示mime类型/扩展名
的对象。
mime.define({
'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
'application/x-my-type': ['x-mt', 'x-mtt'],
// etc ...
}); mime.lookup('x-sft'); // => 'text/x-some-format'
3.2 加载类型文件mime.load(filepath)
mime
模块支持从一个Apache的mime.types
文件加载MIME
类型,相对于自定义类型,从现有文件中加载类型更为方便:
mime.load('./my_project.types');
mime模块响应或设置Node.js的Content-Type头的更多相关文章
- 【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
[摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...
- 【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
目录 一. 概述 二. 线程与进程 三. cluster模块源码解析 3.1 起步 3.2 入口 3.3 主进程模块master.js 3.4 子进程模块child.js 四. 小结 示例代码托管在: ...
- 利用Docker设置Node.js
docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上 ...
- 【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
[摘要] cluster模块详解 示例代码托管在:http://www.github.com/dashnowords/blogs 阅读本章需要先阅读本系列前两章内容预热一下. 一. 引言 前两篇博文中 ...
- 【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
目录 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨进程通讯工具方法Utils 五.act:queryServer消息 六.轮询调度Roun ...
- Webstorm设置Node.js智能提示
这两天在学习Node.js,在Webstorm上进行编辑时发现竟然没有智能提示!所以写这篇文章来帮助大家度过这个坑! File -> Settings -> Languages&F ...
- sublime设置node.js编译
1. 首先需安装node环境并配置好环境变量,安装教程. 2. 然后在sublime中打开工具(Tools)→编译系统(Build System)→新编译系统(New Build System) 3. ...
- [label][Node.js] Three content management systems base on Node.js
1. Keystonejs http://keystonejs.com/ 2. Apostrophe http://apostrophenow.org/
- node.js 模块和其下载资源的镜像设置
以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...
随机推荐
- CentOS下shell显示-bash-4.1$不显示用户名路径
Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法. 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: -bash-4.1$ \ -b ...
- Redis Windows 安装
摘自:https://www.cnblogs.com/M-LittleBird/p/5902850.html 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的wind ...
- Linux的简单介绍.
Linux操作系统概述: Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linux Torvalds(林纳斯·托瓦兹)起初开发 ...
- kivy 小demo
from kivy.lang.builder import Builder from kivy.uix.boxlayout import BoxLayout from kivy.app import ...
- P3804 【模板】后缀自动机
P3804 [模板]后缀自动机 后缀自动机模板 详情可见luogu题解板块 #include<iostream> #include<cstdio> #include<cs ...
- python之接口与抽象类
一.接口与归一化设计 1.什么是接口 1)是一组功能集合 2)接口的功能是用于交互 3)接口只定义函数,但不涉及函数的实现 4)这些功能是相关的 2.为什么要用接口 接口提取了一群类共同的函数,然后让 ...
- 【ASP.Net MVC3 】使用Unity 实现依赖注入
转载于:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html 家人身体不太好,好几天没在园子里发帖了. 新项目还是要用M ...
- Iris Classification on Tensorflow
Iris Classification on Tensorflow Neural Network formula derivation \[ \begin{align} a & = x \cd ...
- python网络编程及高并发问题
面试其他篇 目录: 1.1
- python识别图片生成字符模式
此python文件来自D7哥, 放在这里备份. 用法 python3 PIL\&argparse.py 1.jpg -o test.txt --width 300 --height 300 p ...