详解用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 相关文章推荐
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
javascript实现控制div颜色
Jul 07 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
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
mysql 全文搜索 技巧
2007/04/27 PHP
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
linux下python抓屏实现方法
2015/05/22 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
物理力学求职信
2014/02/18 职场文书
贷款委托书范本
2014/04/08 职场文书
党校学习心得体会范文
2014/09/09 职场文书
贷款承诺书
2015/01/20 职场文书
通知的写法
2015/04/23 职场文书
音乐之声观后感
2015/06/04 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL