详解用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正则表达式中参数g(全局)的作用
Nov 11 Javascript
flexigrid 参数说明
Nov 23 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
Apr 16 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
node.js中的console.dir方法使用说明
Dec 10 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
Jul 01 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
详解html-webpack-plugin用法全解
Jan 22 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
利用promise及参数解构封装ajax请求的方法
Mar 24 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
第八节--访问方式
2006/11/16 PHP
php简单统计在线人数的方法
2016/05/10 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
Python数据类型学习笔记
2016/01/13 Python
基于python绘制科赫雪花
2018/06/22 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python解析多帧dicom数据详解
2020/01/13 Python
python regex库实例用法总结
2021/01/03 Python
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
介绍一下如何优化MySql
2016/12/20 面试题
建筑学推荐信
2013/11/03 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
母婴店促销方案
2014/03/05 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
十佳党员事迹材料
2014/08/28 职场文书
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers
Android实现图片九宫格
2022/06/28 Java/Android