MST
星途 面试题库

面试题:Node.js中如何使用zlib进行简单的压缩优化

在Node.js项目中,假设你有一个HTTP服务器需要返回较大的文本文件给客户端,描述如何使用zlib模块对响应数据进行压缩以提高传输速度,并给出关键代码示例。
44.5万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 引入必要模块: 在Node.js中,首先需要引入http模块来创建HTTP服务器,引入fs模块来读取文件,引入zlib模块来进行数据压缩。
    const http = require('http');
    const fs = require('fs');
    const zlib = require('zlib');
    
  2. 创建HTTP服务器并设置响应: 读取文件内容,通过zlib模块的createGzip方法创建一个压缩流,将文件内容管道到压缩流,再将压缩流管道到HTTP响应。
    const server = http.createServer((req, res) => {
        const filePath = 'largeTextFile.txt';// 假设的大文本文件路径
        const readStream = fs.createReadStream(filePath);
        const gzip = zlib.createGzip();
    
        res.writeHead(200, {
            'Content-Type': 'text/plain',
            'Content-Encoding': 'gzip'
        });
    
        readStream.pipe(gzip).pipe(res);
    
        readStream.on('error', (err) => {
            res.writeHead(500, { 'Content-Type': 'text/plain' });
            res.end('Error reading file');
        });
    
        gzip.on('error', (err) => {
            res.writeHead(500, { 'Content-Type': 'text/plain' });
            res.end('Error compressing data');
        });
    });
    
    const port = 3000;
    server.listen(port, () => {
        console.log(`Server running on port ${port}`);
    });
    

上述代码中:

  • 首先引入了httpfszlib模块。
  • 创建HTTP服务器,当有请求到来时,尝试读取指定的大文本文件。
  • 通过zlib.createGzip()创建一个Gzip压缩流。
  • 设置HTTP响应头,告知客户端数据是经过Gzip压缩的。
  • 使用pipe方法将文件读取流连接到压缩流,再将压缩流连接到HTTP响应流,实现数据的高效传输。
  • 同时处理文件读取和数据压缩过程中可能出现的错误,并返回相应的错误信息给客户端。