详解用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 相关文章推荐
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
JavaScript模拟数组合并concat
Mar 06 Javascript
node模块机制与异步处理详解
Mar 13 Javascript
JavaScript每天必学之基础知识
Sep 17 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
提升页面加载速度的插件InstantClick
Sep 12 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
vue总线机制(bus)知识点详解
May 10 Javascript
jQuery+ajax实现文件上传功能
Dec 22 jQuery
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
Node与Python 双向通信的实现代码
Jul 16 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定时执行计划任务的多种方法小结
2011/12/19 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python中精确输出JSON浮点数的方法
2014/04/18 Python
一个超级简单的python web程序
2014/09/11 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
python实现五子棋游戏
2019/06/18 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
公证书格式
2015/01/23 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python