Node模拟apache的工作目录

node模拟apache的工作目录

源码

源码后台JS源码

var http = require('http');
var fs = require('fs');
var template = require('art-template');
var server = http.createServer(function(rsp, res) {
    var url = rsp.url;
    if(url == '/favicon.ico') return;
    url = url.substr(1) ? url.substr(1) : 'index.html';
    if(url === 'index.html') {
        fs.readFile('./../' + url, function(err, data) {
            if(err) throw err;
            var render = template.compile(data.toString());
            fs.readdir('./../', function(err, data) {
                res.end(render({ files: data }))
            })
        });
    } else {
        fs.readFile('./../index.html', function(err, data) {
            if(err) throw err;
            var render = template.compile(data.toString());
            fs.readdir('./../' + url, function(err, data) {
               //处理readdir只能读取文件夹,用户查询到目录最后访问文件的操作
                if(err) {
                    //访问的不是文件夹访则开始读取文件内容
                    fs.readFile('./../' + url, function(err, data) {
                        if(err) throw err;
                        res.end(data);
                    })
                } else {
                    //处理多级目录的问题解决办法
                    url = url.split('/').length >= 2 ? url.split('/')[url.split('/').length - 1] : url;
                    res.end(render({ files: data, urlData: url + '/' }));
                }
            })
        });
    }

});
server.listen(3000, function() {
    console.log('running.....')
})

模板源码(html)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <ul>
            {{each files}}
                <li><a href="{{urlData}}{{ $value}}">{{ $value}}</a></li>
            {{/each}}
        </ul>
    </body>
</html>

使用说明:(详情请看图)

  1. 首先利用npm下载第三方的模板引擎: npm i art-template;

  2. 在你的工作目录下添加app文件夹并引入后台的app.js代码

  3. 在工作目录环境下引入模板index.html

image.png

写程序过程中遇到的问题与用到的node技术:

  • [x] 技术
  • 采用了node两个模块,http和fs模块,具体的API详见官网:
  • fs模块的度文件readFile和读文件夹readdir的API,和http的服务开启的API(此次程序绑定的端口为3000)
  • [x] 问题
  1. 利用访问的目录来确定此次访问的文件内容;就会出现路径问题,此处需采用的是相对路径
  2. 文件的多级访问中,目录中嵌套文件的处理,处理上层目录的url,利用a链接href来进行操作
  3. fs模块的readdir的API只能读取文件夹读取文件时会产生err错误,利用这个特性可以判断来读取文件;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,125评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,202评论 25 708
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,639评论 2 41
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • 袅袅炊烟升起,思绪飘到了哪里? 那是印象中唯一可称之为家的地方,可又从来没有在那个地方一家团圆过; 可能她这半辈子...
    你说我听好么阅读 424评论 6 0