详解用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中使用css需要注意的地方小结
Sep 01 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
Jun 16 Javascript
JavaScript中闭包之浅析解读(必看篇)
Aug 25 Javascript
jquery+ajax实现省市区三级联动效果简单示例
Jan 04 Javascript
jQuery实现元素的插入
Feb 27 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 Javascript
vue.js Router中嵌套路由的实用示例
Jun 27 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
php+mysql 实现身份验证代码
2010/03/24 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
通过python3实现投票功能代码实例
2019/09/26 Python
python常用排序算法的实现代码
2019/11/08 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
2014升学宴答谢词
2014/01/26 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
法律进机关实施方案
2014/03/12 职场文书
服务理念标语
2014/06/18 职场文书
树转促学习心得体会
2014/09/10 职场文书
前台接待员岗位职责
2015/04/15 职场文书
故意杀人案辩护词
2015/05/21 职场文书