node-js设置mime类型

mime类型(Multipurpose Internet Mail Extensions)

媒体类型是一种标准,用来表示文档、文件或字节流的性质和格式。这里只是介绍,真实项目中会有其它实现方式。

Http服务可以通过设置响应头Content-type来表明响应体的mime类型,浏览器通过类型来决定资源处理。
常见的mime类型:

文件格式mime类型
htmltext/html
csstext/css
jstext/javascript
jpgimage/jpeg
pngimage/png
gifimage/gif
mp4video/mp4
jsonapplication/json

对于未知的资源类型:可以使用application/octet-stream,浏览器遇到此类型,会对响应体独立存储,也就是下载效果

以上次的静态资源服务为例:
通获取文件的后缀名来设置对应的mime类型

const http = require('http');
// 文件模块
const fs = require('fs')
// 使用path 获取文件后缀
const path = require('path')
const mimes = {
	html:'text/html',
	css:'text/css',
	js:'text/javascript',
	jpg:'image/jpeg',
	png:'image/png',
	gif:'image/gif',
	mp4:'video/mp4',
	json:'application/json'
}
const server = http.createServer((resquest,response)=>{
    let { pathname } = new URL(resquest.url,'http://127.0.0.1')
    console.log(pathname)
    let filePath = __dirname + '/assets'+ pathname
    fs.readFile(filePath,(error,data)=>{
        if(error){
            response.statusCode = 500
            response.end('文件读取失败')
            return
        }
        // 获取后缀因为带有点,截取第一个
        let suffix = path.extname(filePath).slice(1)
        let type = mimes[suffix]
        if(type){
        	response.setHeader('Content-type',type + ';charset=utf-8')
        }else{
        	response.setHeader('Content-type','application/octet-stream')
        }
        response.end(data)
    })
})
server.listen(9000,()=>{
    console.log('启动成功')
})

实际不添加mime类型浏览器也是可以的,因为浏览器会根据资源类型自动判断,加上只是更规范。

需要了解的小问题
  1. 上面代码中,会发现在type后面增加了 ‘;charset=utf-8’,这是为什么呢?为了解决乱码问题,假如没有这个配置的话,那么代码中的中文注释等,会出现乱码问题。
  2. 正常网页中像css、js等是可以不设置utf-8的。
  3. 假设我们不设置utf-8,会发现html文件时不受影响的,因为在html文件中meta标签中会声明。
    延申一个小问题:在服务中设置的mime类型,优先级会高于页面中设置的。
    在这里插入图片描述
    既然css、js等不受utf-8字符集影响,那其实可以修改成一下的形式。
    在这里插入图片描述
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值