• node 之 apache


    需要下载第三方模块 art-template

    npm install art-template --save
    
    var template = require('art-template');
    var html = template(__dirname + '/tpl.art', {
        user: {
            name: 'aui',
            age:18
        }
    });
    console.log(html);
    

      

      

    一.初步实现apache

    //初步实现apache功能
    const http = require("http");
    const fs = require("fs");
    const path = require("path");
    
    //任意目录地址
    const wwwdir = "D:黑马文件就业班训练
    odeStyexpressapache";
    
    const server = http.createServer();
    server.listen("8808", () => {
      console.log("8808的服务端已经开启......");
    });
    
    server.on("request", function (req, res) {
      let url = req.url;
      if (url === "/") {
        fs.readFile(path.join(__dirname, "/index.html"), (err, data) => {
          if (err) {
            return res.end("404 not found");
          }
          res.end(data);
        });
      } else if (url === "/boy.html") {
        fs.readFile(path.join(__dirname, "/boy.html"), (err, data) => {
          if (err) {
            return res.end("404 not found");
          }
          res.end(data);
        });
      } else if (url === "/plus/login.html") {
        fs.readFile(path.join(__dirname, "/plus/login.html"), (err, data) => {
          if (err) {
            return res.end("404 not found");
          }
          res.end(data);
        });
      }
    });
    

    分析思考:

    1/每一次请求都需要去判断if...else...

    2/const url = req.url  //这句可以获取请求地址

    //初步实现apache功能
    const http = require("http");
    const fs = require("fs");
    const path = require("path");
    //创建服务
    const server = http.createServer();
    //启动服务
    server.listen("8808", () => {
      console.log("8808的服务端已经开启......");
    });
    //监听请求
    server.on("request", function (req, res) {
      const filePath = path.join(__dirname, req.url);
      let url = req.url;
      fs.readFile(filePath, (err, data) => {
        if (err) {
          return res.end("404 not found");
        }
        res.end(data);
      });
    });
    

      

    使用apache实例一个文件管理页面demo

    const http = require("http");
    const fs = require("fs");
    const path = require("path");
    const template = require("art-template");
    //创建服务
    const server = http.createServer();
    //启动服务
    server.listen("8808", () => {
      console.log("8808的服务端已经开启......");
    });
    //监听请求
    server.on("request", function (req, res) {
      let url = req.url;
      let urlPath = path.join(__dirname, url);
    
      fs.stat(urlPath, (err, stats) => {
        if (err) {
          return res.end("404 not found");
        }
        console.log(stats.isFile());
        if (stats.isFile()) {
          //如果是普通文件
    
          fs.readFile(urlPath, function (err, data) {
            if (err) {
              return res.end("404 not found");
            }
            res.end(data);
          });
        } else if (stats.isDirectory()) {
          //表示一个文件系统目录,则返回true
          let templateStr = fs.readFileSync("./template.html").toString();
          let files = fs.readdirSync(urlPath);
    
          let htmlStr = template.render(templateStr, { files: files });
          res.end(htmlStr);
        }
      });
    

    html页面

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <title id="title">hello</title>
        <style>
          h1 {
            border-bottom: 1px solid #c0c0c0;
            margin-bottom: 10px;
            padding-bottom: 10px;
            white-space: nowrap;
          }
    
          table {
            border-collapse: collapse;
          }
    
          th {
            cursor: pointer;
          }
    
          td.detailsColumn {
            -webkit-padding-start: 2em;
            text-align: end;
            white-space: nowrap;
          }
    
          a.icon {
            -webkit-padding-start: 1.5em;
            text-decoration: none;
          }
    
          a.icon:hover {
            text-decoration: underline;
          }
    
          a.file {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ")
              left top no-repeat;
          }
    
          a.dir {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ")
              left top no-repeat;
          }
    
          a.up {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ")
              left top no-repeat;
          }
    
          html[dir="rtl"] a {
            background-position-x: right;
          }
    
          #parentDirLinkBox {
            margin-bottom: 10px;
            padding-bottom: 10px;
          }
    
          #listingParsingErrorBox {
            border: 1px solid black;
            background: #fae691;
            padding: 10px;
            display: none;
          }
        </style>
      </head>
    
      <body>
        <div id="listingParsingErrorBox">
          糟糕!Google Chrome无法解读服务器所发送的数据。请<a
            href="http://code.google.com/p/chromium/issues/entry"
            >报告错误</a
          >,并附上<a href="LOCATION">原始列表</a></div>
        <h1 id="header">www 目录</h1>
        <div id="parentDirLinkBox" style="display: none">
          <a id="parentDirLink" class="icon up">
            <span id="parentDirText">[上级目录]</span>
          </a>
        </div>
        <table>
          <thead>
            <tr class="header" id="theader">
              <th onclick="javascript:sortTable(0);">名称</th>
              <th class="detailsColumn" onclick="javascript:sortTable(1);">大小</th>
              <th class="detailsColumn" onclick="javascript:sortTable(2);">
                修改日期
              </th>
            </tr>
          </thead>
          <tbody id="tbody">
            {{each files}}
            <tr>
              <td data-value="apple/">
                <a class="icon dir" href="{{$value}}">{{$value}}</a>
              </td>
              <td class="detailsColumn" data-value="0"></td>
              <td class="detailsColumn" data-value="1509589967">
                2017/11/2 上午10:32:47
              </td>
            </tr>
            {{/each}}
          </tbody>
        </table>
      </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <title id="title">hello</title>
        <style>
          h1 {
            border-bottom: 1px solid #c0c0c0;
            margin-bottom: 10px;
            padding-bottom: 10px;
            white-space: nowrap;
          }
    
          table {
            border-collapse: collapse;
          }
    
          th {
            cursor: pointer;
          }
    
          td.detailsColumn {
            -webkit-padding-start: 2em;
            text-align: end;
            white-space: nowrap;
          }
    
          a.icon {
            -webkit-padding-start: 1.5em;
            text-decoration: none;
          }
    
          a.icon:hover {
            text-decoration: underline;
          }
    
          a.file {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ")
              left top no-repeat;
          }
    
          a.dir {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ")
              left top no-repeat;
          }
    
          a.up {
            background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ")
              left top no-repeat;
          }
    
          html[dir="rtl"] a {
            background-position-x: right;
          }
    
          #parentDirLinkBox {
            margin-bottom: 10px;
            padding-bottom: 10px;
          }
    
          #listingParsingErrorBox {
            border: 1px solid black;
            background: #fae691;
            padding: 10px;
            display: none;
          }
        </style>
      </head>
    
      <body>
        <div id="listingParsingErrorBox">
          糟糕!Google Chrome无法解读服务器所发送的数据。请<a
            href="http://code.google.com/p/chromium/issues/entry"
            >报告错误</a
          >,并附上<a href="LOCATION">原始列表</a></div>
        <h1 id="header">www 目录</h1>
        <div id="parentDirLinkBox" style="display: none">
          <a id="parentDirLink" class="icon up">
            <span id="parentDirText">[上级目录]</span>
          </a>
        </div>
        <table>
          <thead>
            <tr class="header" id="theader">
              <th onclick="javascript:sortTable(0);">名称</th>
              <th class="detailsColumn" onclick="javascript:sortTable(1);">大小</th>
              <th class="detailsColumn" onclick="javascript:sortTable(2);">
                修改日期
              </th>
            </tr>
          </thead>
          <tbody id="tbody">
            {{each files}}
            <tr>
              <td data-value="apple/">
                <a class="icon dir" href="{{$value}}">{{$value}}</a>
              </td>
              <td class="detailsColumn" data-value="0"></td>
              <td class="detailsColumn" data-value="1509589967">
                2017/11/2 上午10:32:47
              </td>
            </tr>
            {{/each}}
          </tbody>
        </table>
      </body>
    </html>

      

     参考网址:https://blog.csdn.net/lucky541788/article/details/83903964

      

  • 相关阅读:
    error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27
    C# Console 运行之后最小化到状态栏
    CentOS7 设置防火墙端口
    Spring boot 与quart集成并在Job中注入服务
    Cron表达式周1至周5,每天上午8点至下午18点,每分钟执行一次
    Electron 调用系统Office软件
    jquery之超简单的div显示和隐藏特效demo
    IE系列不支持圆角等CSS3属性的解决方案
    使用CSS3建立不可选的的文字
    ASP.NET中使用TreeView显示文件
  • 原文地址:https://www.cnblogs.com/zmztya/p/14363679.html
Copyright © 2020-2023  润新知