mime

mime 是什么?

mime是node的第三方模块,通过mime可以根据当前请求的文件类型动态设置响应头的类型,例如:请求的文件类型为html,那么响应头中的content-type属性对应的值就应该为 text/html

mime 怎么使用?

1、通过npm安装mime

 npm install mime

2、引入mime

const mime = require('mime');

3、通过mime对象中的getType()获取响应头文件类型

// 根据文件路径获取响应头文件类型
const responseFileType = mime.getType(filePath);
console.log('responseFileType:'+responseFileType);
/*
当请求地址为http://localhost:8008/alipay.png时的响应头文件类型
responseFileType:image/png
 */

4、动态设置响应头文件类型

// 根据请求文件类型的不同响应不同的文件类型
response.writeHead(200,{
   'content-type':responseFileType
});

全部代码:

/*
该Demo主要是为了演示静态资源访问的
请求地址路径与服务器的文件路径是可以不一样的。
1、获取用户输入的请求路径
2、然后将请求路径转换为服务器中真实的物理路径
3、然后读取服务器中文件的内容
4、最终将服务器中文件的内容返回给客户端
启动服务后,浏览器输入http://localhost:8008/alipay.png即可访问静态图片资源
 */
// 引入创建web所需的http系统模块
const http = require('http');
// 引入处理url地址的url系统模块
const url = require('url');
// 引入处理路径分隔符的path系统模块
const path = require('path');
// 引入处理文件的fs系统模块
const fs = require('fs');
// 为了实现根据请求文件类型的不同而设置不同的响应头文件类型,引入mime
const mime = require('mime');

// 创建服务
const server = http.createServer();

/*
监听请求
参数一:监听的时间名称
参数二:监听的事件回调函数
 */
server.on('request',(request,response) => {

    // 获取输入的url地址(url地址和参数)
    const urlObj = url.parse(request.url);
    console.log(urlObj);

    // 获取url地址
    const pathname = urlObj.pathname;

    // 拼接服务器静态资源路径
    const publicPath = path.join(__dirname,'public');
    console.log(publicPath);
    //D:\WebstormProjects\node-demo\static\public

    // 拼接静态资源的文件路径
    const filePath = path.join(publicPath,pathname);

    // 根据文件路径获取响应头文件类型
    const responseFileType = mime.getType(filePath);
    console.log('responseFileType:'+responseFileType);
    /*
    当请求地址为http://localhost:8008/alipay.png时的响应头文件类型
    responseFileType:image/png
     */

    /*
    读取该文件
    参数一:文件的绝对路径
    参数二:读取文件时的回调函数
     */
    fs.readFile(filePath,(error,dos) => {

        if (error == null){

            // 根据请求文件类型的不同响应不同的文件类型
            response.writeHead(200,{
               'content-type':responseFileType
            });

            // 如果文件读取成功,那么将改文件响应给客户端
            response.end(dos);
        } else {
            // 文件未找到时给出客户端404的状态码, 并设置响应数据的编码格式,以防乱码
            response.writeHead(404,{
                'content-type':'text/html;charset=utf-8'
            });
            response.end('文件未找到');
        }

    });

});

server.listen(8008);
console.log('本服务已启动,可以通过localhost:8008进行访问');

项目目录结构:

项目目录结构

如果觉得文章有帮助到你,可以扫描以下二维码
   请本文作者 喝一杯
pay_weixin pay_weixin

发表评论

电子邮件地址不会被公开。 必填项已用*标注