详解用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 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
JavaScript作用域链示例分享
May 27 Javascript
window.location的重写及判断location是否被重写
Sep 04 Javascript
JS显示表格内指定行html代码的方法
Mar 31 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
浅谈angularJS 作用域
Jul 05 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
Javascript中replace()小结
Sep 30 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
Jan 31 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 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/22 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python中的变量如何开辟内存
2018/06/26 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python实现名片管理系统项目
2019/04/26 Python
python SocketServer源码深入解读
2019/09/17 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
机关办公室岗位职责
2014/04/16 职场文书
商务经理岗位职责
2014/07/30 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
工商行政处罚决定书
2015/06/24 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
Redis基本数据类型List常用操作命令
2022/06/01 Redis
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
Python find()、rfind()方法及作用
2022/12/24 Python