node.js系列(实例):原生node.js实现静态资源管理
/**
* 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实现静态资源管理的更多相关文章
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- js系列(10)js的运用(二)
本节继续介绍在html页面中js的运用. (1)数码时钟:(http://files.cnblogs.com/files/MenAngel/text05.zip) <!DOCTYPE ...
- js系列(9)js的运用(一)
本节开始介绍javascript在html页面中的运用. (1)link样式表的动态绑定:(http://files.cnblogs.com/files/MenAngel/text04 ...
- node.js系列(实例):原生node.js实现接收前台post请求提交数据
前台界面: 前台代码: <form class="form-horizontal" method="post" action="http:127 ...
- node.js系列(实例):原生node.js+formidable模块实现简单的文件上传
/** * 原生node.js结合formidable模块实现图片上传改名 * @Author:Ghost * @Date:2016/07/15 * @description: * 1.引入模块htt ...
- Node.js系列——(4)优势及场景
背景 之前几篇系列文章简单介绍了node.js的安装配置及基本操作: Node.js系列--(1)安装配置与基本使用 Node.js系列--(2)发起get/post请求 Node.js系列--(3) ...
- Node.js系列-http
前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...
- Node.js系列-express(上)
前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...
- Node.js实战项目学习系列(1) 初识Node.js
前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...
- Node.js系列基础学习----安装,实现Hello World, REPL
Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...
随机推荐
- jquery事件与绑定事件
1.首先,我们来看一下经常使用的添加事件的方式: <input type="button" id="btn" value="click me!& ...
- 专题:DUILIB Win32 透明效果
Win32 透明效果相关基础知识 Layered Windows 分层窗口.这是Windows2000开始引入的概念,重新定义了窗口的Hit Testing方法,以前都是把窗口按rectangle的方 ...
- ACM 重建二叉树
重建二叉树 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数 ...
- conky 1.10以后的新配置格式
包装 config conky.config = { ... } 包装 TEXT conky.text = [[ ... ]] 每个 config 选项的变量和取值之间插入 "=" ...
- SQL一次查出相关类容避免长时间占用表(上)
/* server: db: EDI */ -- 以下案例多次查询同一张表,仅有组合条件Name+Direction不同 --可以使用一次查出相关类容避免长时间占用表 USE EDI GO DECLA ...
- TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个
1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android ...
- solr home 目录设置
对于在tomcat 中部署solr 来说,有以下三处可以配置 solr.solr.home(即solr的数据文件位置): 1. 在解压缩solr.war后的webapps/solr 中的WEB-INF ...
- python 接口自动化测试(三)
1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...
- 两种构造 String 的方法效率比较
直接上代码吧: package mm_test; /** * @Function: TODO ADD FUNCTION. <br/> * @Date: 2016年4月14日 下午8:25: ...
- iOS多线程——同步异步串行并行
串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分: 先说一下队列和任务: (1)队列分为串行和并行,任务的执行 ...