详解用node搭建简单的静态资源管理器


Posted in Javascript onAugust 09, 2017

本文介绍了用node搭建简单的静态资源管理器,分享给大家,具体如下:

我么都知道,老牌的3p服务器都是自带静态资源管理器的。但是node不同,它没有web容器,它的路由地址和真实地址可以没有联系,所有node的优点,是可以把路由做得相当漂亮。

但静态资源管理器也是必不可少的东西,今天我主要用node的fs模块,自己手写一个简单的静态资源管理器。

首先,建一个static文件夹,所有的静态文件都将放到这个文件夹下

详解用node搭建简单的静态资源管理器

引包

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");

path包是为了读取文件的后缀名

var extname = path.extname(pathname);

用fs读出文件

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
http.createServer(function(req,res) {
  //得到用户路径
  var pathname = url.parse(req.url).pathname;
  //判断此时用户输入的是文件地址还是文件夹地址
  //如果是文件夹地址,那么自动请求文件夹中的index.html
  if(pathname.indexOf(".") == -1) {
    pathname = "index.html";
  }
  //拓展名
  var extname = path.extname(pathname);

  //把文件读出来
  res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
  fs.readFile("./static/"+pathname,function(err,data) {
    if(err) {
      //如果此文件不存在,就因该用404返回
      fs.readFile("./static/404.html",function(err,data) {
        res.writeHead(404,{"Content-type":"text/html;charset=UTF-8"});
        res.end(data);
      });
      return;
      //res.end('<center>服务器傲娇的向你抛出了一个404错误</center')
    };
    //MIME类型,就是
    //网页文件:ttext/html
    //jpg文件:image/jpg
    getMime(extname,function(mime) {
      res.writeHead(200,{"Content-type":mime});
      res.end(data);
    });

  });

}).listen(3000,"127.0.0.1");
function getMime(extname,callback) {
  fs.readFile("./static/data.json",function(err,data) {    
    if(err) {
      throw Error("找不到data,json文件");
      return;
    }
    var data = JSON.parse(data);
    var mime = data[extname]||"text/plain";
    callback(mime);
  });
  /*switch(extname) {
    case:".html":
      return "text/html";
      break;
    case ".jpg" :
      return "image/jpg";
      break; 
    case ".css" :
      return "text/css";
      break;
  }*/
  
}

getMime()函数的作用是给不同类型的文件指定不同的content-type。这里我用了两种方法,一种是引入一个包含很多mime的json文件,另一种是直接列举case语句。

引入json的方法要复杂一下。你要注意怎样传参和怎样去设置回调,来避免异步。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
轻轻松松学习JavaScript
Feb 25 Javascript
JavaScript对象模型-执行模型
Apr 28 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
自写的jQuery异步加载数据添加事件
May 15 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
javascript随机显示背景图片的方法
Jun 18 Javascript
JavaScript中的cacheStorage使用详解
Jul 29 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
JS设置手机验证码60s等待实现代码
Jun 14 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
electron + vue项目实现打印小票功能及实现代码
Nov 25 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 #Javascript
vue.js框架实现表单排序和分页效果
Aug 09 #Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 #Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 #jQuery
vue 打包后的文件部署到express服务器上的方法
Aug 09 #Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 #Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 #Javascript
You might like
常用PHP框架功能对照表
2014/10/23 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
django创建超级用户过程解析
2019/09/18 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
分享一个python的aes加密代码
2020/12/22 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
室内设计实习自我鉴定
2013/09/25 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
小摄影师教学反思
2014/04/27 职场文书
《社戏》教学反思
2016/02/22 职场文书