详解用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 相关文章推荐
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
Nov 17 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
vue.js父组件使用外部对象的方法示例
Apr 25 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
Oct 09 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 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
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
js实现进度条的方法
2015/02/13 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
js实现全选和全不选
2020/07/28 Javascript
python二分法实现实例
2013/11/21 Python
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
python实现UDP协议下的文件传输
2020/03/20 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
python 下载文件的几种方法汇总
2021/01/06 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
办公室文员工作职责
2014/01/31 职场文书
商业街策划方案
2014/05/31 职场文书
争先创优演讲稿
2014/09/15 职场文书
生日祝酒词大全
2015/08/10 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
opencv 分类白天与夜景视频的方法
2021/06/05 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
SQL Server实现分页方法介绍
2022/03/16 SQL Server
vue的项目如何打包上线
2022/04/13 Vue.js