0%

710_http模块_设置mime类型

​ HTTP 服务可以设置响应头 Content-Type 来表明响应体的 MIME 类型,浏览器会根据该类型决定如何处理资源

const http=require('http');
const fs=require('fs');
const path=require('path')

let mimes={
html: 'text/html',
css: 'text/css',
js: 'text/javascript',
png: 'image/png',
jpg: 'image/jpeg',
gif: 'image/gif',
mp4: 'video/mp4',
mp3: 'audio/mpeg',
json: 'application/json'
}

const server=http.createServer((request,response)=>{
    response.setHeader('content-type','text/html;charset=utf-8')
    //读取文件内容

    //获取请求URL的路径
    let {pathname}=new URL(request.url,'http://127.0.0.1');

    //拼接文件路径
    let filePath=__dirname+'/page'+ pathname;

    //读取文件fs异步API
    fs.readFile(filePath,(err,data)=>{
      if(err){
        response.setHeader('content-type','text/html;charset=utf-8')//解决中文乱码问题
        //判断段错误代号
        switch(err.code){
          case 'ENOENT':
            response.statusCode=404
            response.end('<h1>404 Not Found</h1>')
        }
        // response.statusCode=500
        // response.end('文件读取失败')
        return;
      }

      //获取文件名后缀
      let ext=path.extname(filePath).slice(1)
      
      //获取对应的类型
      let type=mimes[ext]
      if(type){
        //匹配到
        response.setHeader('content-type',type+';charset=utf-8')//解决中文乱码问题
      }else{
        response.setHeader('content-type','application/octet-stream')
      }

      //响应文件内容
      response.end(data)
    })

    // if(pathname ==='/index.html'){
    //   let html=fs.readFileSync(__dirname+'/page/index.html')
    //   response.end(html)
    // }else if(pathname ==='/css/app.css'){
    //   let css=fs.readFileSync(__dirname+'/page/css/app.css')
    //   response.end(css)
    // }else if(pathname ==='/images/logo.png'){
    //   let img=fs.readFileSync(__dirname+'/page/images/logo.png')
    //   response.end(img)
    // }else{
    //   response.statusCode=404;
    //   response.end('<h1>Not Found</h1>')
    // }
})

//监听端口,启动服务
server.listen(9000,()=>{
    console.log('服务已经启动...');
})