详解用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 UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
checkbox全选所涉及到的知识点介绍
Dec 31 Javascript
jquery等待效果示例
May 01 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
javascript中获取class的简单实现
Jul 12 Javascript
Angular Module声明和获取重载实例代码
Sep 14 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 Javascript
微信小程序 按钮滑动的实现方法
Sep 27 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
Vue开发环境跨域访问问题
Jan 22 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乱码问题
2012/03/25 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
jQuery 选择器理解
2010/03/16 Javascript
js Dialog 实践分享
2012/10/22 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
全面了解js中的script标签
2016/07/04 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
微信跳一跳辅助python代码实现
2018/01/05 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
Python利用FlashText算法实现替换字符串
2022/03/31 Python
Python实现信息管理系统
2022/06/05 Python