nodejs搭建静态文件服务器

本文介绍了如何使用NodeJS搭建一个简单的静态文件服务器,用于托管和分享文件。作者通过学习和实践,实现了根据客户端请求动态列出文件和文件夹,并使用后端模板渲染展示。在过程中遇到图标显示问题并找到了解决办法,加深了对NodeJS模块和模板渲染的理解。
摘要由CSDN通过智能技术生成

用NodeJS搭建静态文件服务器

引言

之前用lamp和wamp搭建过网站,集成的软件套装对于建站十分方便。apache的autoindex功能我非常喜欢,有时候想要分享一些文件给同学,但是又懒得用U盘复制,传网盘或者发邮件速度又太慢,而且学生党对于大文件传输网费非常昂贵。此时,apache的文件托管功能就非常合适了。把需要分享的文件放入指定的文件夹,然后直接告诉同学:喂,你连上路由器,登陆这个网址:192.168.1.1/share,你自己下载就行!(装逼。。。)

不过apache的功能对于像我这样的三脚猫,有时候是非常崩溃的。有时候autoindex功能开启了也不能访问文件,有时候文件夹设置很是麻烦,有时候mac系统和windows系统还不一样。配置apache是非常痛苦的!最近学着node,所以就想用Node来简单实现一下静态服务功能。不过,鉴于是初学者(我发现看了朴灵的《深入浅出NodeJS》对学习写代码很有帮助),是为了功能而功能的,在代码质量上还是存在很大问题的,希望各位大佬不吝赐教,给出改进的意见,提高代码质量。下面是我探究的过程。

过程

需要的模块

这里用到模块http,path,url,fs,mime,art-template

探索过程

思路:

  1. 客户端发起请求
  2. 请求路径path,对应文件路径 ./public/path
  3. 判断路径是文件还是文件夹
  4. 如果是文件,则将文件发送给客户端
  5. 如果是文件夹,则列出所有文件和文件夹,附上链接

为了美观(虽然还是很丑),实现5采用的是后端模板渲染。而模板是直接在浏览器中打开文件夹,然后检查元素将代码拷贝下来,将列表部分换成模板格式文本。

遇到的问题:

图标无法正常显示

在浏览器打开文件路径,可以看到文件的图标的href是类似“moz-icon://.pdf?size=16”。但是我将这段代码直接给我的图片的href却无法正常显示(有大牛可以告诉我这是为什么吗)。于是我将图标下载下来放在和public同级的index_template_files文件夹里面。我的js文件是和public以及index_template_files同级的,但是我无论如何设置href都无法正常显示图标。后来发现我对于文件处理的时候,统一在路径前加了./public/,对于正常资源没有问题。但是对于图标不在public里面的就找不到文件了。于是在读取文件时,多了一个判断是否为图标文件。

效果

源代码

后端代码如下:

var http = require('http');
var url = require('url');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var template = require('art-template');
//basedir作为文件服务器的根目录,防止网上访问到程序源码
var basedir='public';
//这里是在创建服务器的时候就写入了回调函数,也可以后续在server.on('request',callback)中写
server = http.createServer(function(req,res){
    //decodeURI函数的功能就是为了将变成%序列的中文转回来
    var dirpath = decodeURI(url.parse(req.url).pathname);
    var template_data={};
    template_data['path']=dirpath;
    //如果是根目录,则不希望出现回到上层目录,所以不为根目录设置上层目录
    if (dirpath!=='/') {
        template_data['last_path']=path.dirname(dirpath);
    }
    //这里为了区分图标文件,图标文件放在不同的文件夹,需要特殊处理,图标文件是如:iconpdf.icon形式的文件
    if (dirpath.startsWith('/icon') && path.extname(dirpath)==='.icon') {
        f=fs.readFile('./'+path.join('index_template_files',dirpath),function(err,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值