详解用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 相关文章推荐
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
js 通用订单代码
Dec 23 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
javascript自定义的addClass()方法
May 28 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Dec 14 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 Javascript
React中的Context应用场景分析
Jun 11 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中的正规表达式(二)
2006/10/09 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php中memcache 基本操作实例
2015/05/17 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
激活 ActiveX 控件
2006/10/09 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python中的 enum 模块源码详析
2019/01/09 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
python不同系统中打开方法
2020/06/23 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
美德好少年主要事迹
2014/01/29 职场文书
元旦趣味活动方案
2014/08/22 职场文书
村安全生产责任书
2014/08/25 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书