/**
* node入门之综合案例(一):简易路由
* @Author : by Ghost
* @Date : 2016/07/11
* @Description :
* 1、引入以下模块
* http模块:创建服务器,处理请求和相应
* URL模块:解析url请求地址
* fs模块:读取文件
* path模块:处理文件路径,获取文件后缀名,路径优化
*
* 2、使用http.createServer()方法创建服务器
* 3、使用url.parse()方法解析浏览器请求路径
* 4、使用fs.readFile()方法读取对应的静态文件
* 5、使用path.extname()方法获取文件后缀名
* 6、设置MIME类型,实现文件兼容
* */ //引入模块
var http = require('http');
var url = require('url');
var fs = require('fs');
var path = require('path'); //创建服务器,监听3000端口
var server = http.createServer(function (req, res) {
//屏蔽/favicon.ico的请求
if(req.url === '/favicon.ico')
{
return ;
}; //解析请求路径
var pathname = url.parse(req.url).pathname; //默认首页
if(pathname.indexOf('.') === -1)
{
pathname = "/index.html"
}; //获取文件后缀名
var extname = path.extname(pathname); //读取文件
fs.readFile('./static/' + pathname, function (err,data) {
//如果出错则表示请求路径不正确,显示404
if(err){
fs.readFile("./static/404.html",function(err,data){
res.writeHead(404,{"Content-Type":"text/html;charset=UTF-8"});
res.end(data);
});
return;
}; //读取数据
//结束响应
getMime(extname,function(mime){
res.writeHead(200,{"Content-Type": mime});
res.end(data);
});
});
}); //设置监听端口
server.listen(3000,'127.0.0.1', function () {
console.log("server is started listen port 3000");
}); //getMIME()
function getMime(extname,callback)
{
fs.readFile('./static/mime.json', function (err,data) {
if(err)
{
throw Error("找不到mime.json文件");
return;
};
var mimeJson = JSON.parse(data);
var mime = mimeJson[extname] || "text/plain";
//执行回调函数,结束异步问题
callback(mime);
});
}

node.js系列(实例):原生node.js实现静态资源管理的更多相关文章

  1. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

  2. js系列(10)js的运用(二)

        本节继续介绍在html页面中js的运用.   (1)数码时钟:(http://files.cnblogs.com/files/MenAngel/text05.zip) <!DOCTYPE ...

  3. js系列(9)js的运用(一)

        本节开始介绍javascript在html页面中的运用.     (1)link样式表的动态绑定:(http://files.cnblogs.com/files/MenAngel/text04 ...

  4. node.js系列(实例):原生node.js实现接收前台post请求提交数据

    前台界面: 前台代码: <form class="form-horizontal" method="post" action="http:127 ...

  5. node.js系列(实例):原生node.js+formidable模块实现简单的文件上传

    /** * 原生node.js结合formidable模块实现图片上传改名 * @Author:Ghost * @Date:2016/07/15 * @description: * 1.引入模块htt ...

  6. Node.js系列——(4)优势及场景

    背景 之前几篇系列文章简单介绍了node.js的安装配置及基本操作: Node.js系列--(1)安装配置与基本使用 Node.js系列--(2)发起get/post请求 Node.js系列--(3) ...

  7. Node.js系列-http

    前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...

  8. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  9. Node.js实战项目学习系列(1) 初识Node.js

    前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...

  10. Node.js系列基础学习----安装,实现Hello World, REPL

    Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...

随机推荐

  1. Struts2学习笔记⑦

    今天我宛若一个智障- Struts2学的差不多了,今天开始做数据库CURD操作的案例,发现模型驱动一直报NullPointerException异常-.我的妈,我查了半天觉得没啥问题,把关注点放在了g ...

  2. TuSDK 简易使用方法 持有图片对象方式

    TuSDK 为涂图照相应用的SDK,打包后文件大小约为5M,缺点为包比较大,且图片清晰度较差一些,优点为直接可以引用滤镜贴纸,方便易用.   使用方法如下:    1.AppDelegate.m 中加 ...

  3. PTVS在Visual Studio中的安装

    下载链接,点这里 PTVS是VS下的python开发插件 1.下载完成后,双击运行,安装完毕 2.解释脚本:打开VS,找到文件-新建-项目,在新建项目页面的左侧树形菜单的已安装->模板-> ...

  4. 简单的线性M移动平均

    最近在写Python的爬虫爬取全校学生的成绩信息和照片,发现些许问题. python的内存管理机制还没摸透,随着程序的运行,占用内存逐渐增大,料想应该是新开辟的空间未及时释放. 先研究研究算法,为比赛 ...

  5. Linux学习之Vim使用

    一 为何要学Vim 所有的Unix Like系统都有自带vi编辑器 一些软件的编辑接口会自动调起vi 作为vi的升级版,vim具有程序编辑功能,而且具有代码颜色高亮显示.辨别代码的正确性等功能 以上优 ...

  6. Android开发之Bitmap的高效加载

    BitmapFactory类提供了四类方法:decodeFile, decodeResource, decodeStream和decodeByteArray 分别用于支持从文件系统,资源,输入流以及字 ...

  7. Onsen UI 前端框架(二)

    上一章介绍了OnsenUI一些入门的知识以及它和AngularJS配合的初始化方法.这一章,咱们继续对这块内容进行介绍,对OnsenUI提供的组件进行更进一步的学习. 咱们从手机应用布局的最上面开始. ...

  8. Hive(笔记)

    (2015.07.22Hive笔记) 一.Hive的安装 1.1Hive的安装过程 下载hive源文件(apache-hive-0.14.0-bin.tar.gz ) 解压hive文件 进入$HIVE ...

  9. Android 5.0(棒棒糖))十大新特性

    Android 5.0(棒棒糖))十大新特性 1. 全新Material Design设计风格 Android Lollipop全新的设计语言是受到了多种因素影响,是一种大胆的平面化创新.换句话说,谷 ...

  10. MySQL基础入门-第一课 新建数据库(linux版本)

    MySQL linux 登录MySQL sudo ),name ),phone )  );  # 或者  ),name ),phone ));  数据类型 数据类型 大小(字节) 用途 格式 INT ...