美文网首页alreadynode
利用node简单模拟Apache服务器获取不同目录下的文件数据

利用node简单模拟Apache服务器获取不同目录下的文件数据

作者: 听书先生 | 来源:发表于2022-03-07 23:04 被阅读0次

    node的服务器路径跟物理文件没有绝对映射关系,但是node可以相对于apache服务器更加灵活的去创建。

    可以利用简单的文件流的读取去模拟获取JSON数据,但是这个会存在问题。

    • 是类似Apache服务器的关系映射表的处理。
    • 是针对不同的文件后缀名,需要考虑的是对不同后缀名的请求头的设置
    const http = require('http');
    const fs = require('fs');
    
    http.createServer((req,res) => {
       fs.readFile('./public/news.json', (error, data) => {
          if (error) {
            throw error;
          } 
          res.end(data)
       })
    }).listen(3000, () => console.log('Server port start ....'));
    

    需要做到的是:服务器指明文件类型,也就是MIME。 MIME:文件后缀名和文件类型的映射表
    我们在public目录下创建两个文件夹,一个为商品goods,一个为新闻news。

    图1.png
    • node.js代码:
    const http = require('http');
    const fs = require('fs');
    const url = require('url');
    const path = require('path');
    
    let MIME = {
      ".html": "text/html;charset=utf8",
      ".css": "text.css",
      ".jpg": "image/jpeg",
      ".gif": "image/gif",
      ".png": "image/png",
      ".js": "application/x-javascript",
      ".json": "text/json"
    }
    
    http.createServer((req, res) => {
       // 1. 获取用户的url路径
       let pathname = url.parse(req.url).pathname;
       let extname = path.extname(pathname);
       // 2. 通过node模拟Apache路径的映射关系     
       fs.readFile('./public' + pathname, (error, data) => {
         if (error) {
            // 防止出现乱码
            res.setHeader('Content-Type', 'text/html;charset=utf8');
            res.end('404, 页面不存在');
            return;
         }
         // 根据MIME映射表去判断文件后缀名去设置对应的请求头
         res.setHeader('Content-Type', MIME[extname])
         res.end(data)
       })
    }).listen(3000, () => console.log('Server port start ....'));
    

    终端cd到指定目录,执行node代码

    图2.png
    但是MIME表是可能存在文件拓展名不存在表中映射关系的,因此需要借用hasOwnProperty方法来判断属性是否是该对象中的。
    // 根据MIME映射表去判断文件后缀名去设置对应的请求头
    if (MIME.hasOwnProperty(extname)) {
       res.setHeader('Content-Type', MIME[extname])
    }
    

    相关文章

      网友评论

        本文标题:利用node简单模拟Apache服务器获取不同目录下的文件数据

        本文链接:https://www.haomeiwen.com/subject/aqqorrtx.html