nodejs http静态服务器
使用nodejs写的很简单的静态服务器,没有做cluster处理,没有做缓存处理,不支持访问文件夹,功能只有一个,就是获取到文件后再返回文件内容。
var fs = require('fs');
var url = require('url');
var http = require('http');
var path = require('path');
var mime = require("./mime").mime;
var HTTP_SERVER_PORT = 3000;
/*
默认页 index.html
*/
var appPath = process.argv[2];
appPath = appPath.replace(/\//g, '\\');
var proxy = http.createServer(function (req, res) {
var reqUrl = url.parse(req.url);
if (reqUrl.pathname == "/") {
reqUrl.pathname = "index.html";
}
var realPath = path.join(appPath, decodeURIComponent(reqUrl.pathname));
fs.exists(realPath, function (exists) {
if (exists && isFileExists(realPath)) {
fs.readFile(realPath, "binary", function (err, file) {
if (!err) {
var contentType = mime.lookupExtension(path.extname(realPath));
res.writeHead(200, {
"Content-Type": contentType + "; charset=utf-8",
"Content-Length": Buffer.byteLength(file, 'binary'),
"Server": "NodeJs(" + process.version + ")"
});
res.write(file, "binary");
res.end();
}
});
} else {
res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
res.write(JSON.stringify({ "error": "file not found: " + realPath }));
res.end();
}
});
});
proxy.on('clientError', function (exception, socket) {
console.log("an error has occurred in client ", exception);
})
proxy.listen(HTTP_SERVER_PORT, function () {
console.log('Http Server running on port:' + HTTP_SERVER_PORT);
});
function isFileExists(filePath) {
return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
};
把代码给改了一下,但是处理流媒体的时候还是有问题。
var proxy = http.createServer(function (req, res) {
var reqUrl = url.parse(req.url);
if (reqUrl.pathname == "/") {
reqUrl.pathname = "index.html";
}
var realPath = path.join(appPath, decodeURIComponent(reqUrl.pathname));
fs.exists(realPath, function (exists) {
if (exists && isFileExists(realPath)) {
var contentType = mime.lookupExtension(path.extname(realPath));
res.writeHead(200, {
"Content-Type": contentType + "; charset=utf-8",
"Content-Length": fs.statSync(realPath).size,
"Server": "NodeJs(" + process.version + ")"
});
console.log(realPath);
var fileStream = fs.createReadStream(realPath);
fileStream.pipe(res, { end: false });
fileStream.on('end', function () {
res.end();
})
} else {
res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
res.write(JSON.stringify({ "error": "file not found: " + realPath }));
res.end();
}
});
});
nodejs-http-server-2015年1月14日-104102.rar
nodejs http静态服务器的更多相关文章
- 安装nodeJs静态服务器(NodeJs Express MVC 框架)
安装 NodeJs Express MVC 框架 新建项目文件夹 打开cmd 执行以下操作: 一.使用Express框架 1)安装express3 $: npm install -g ex ...
- Nodejs实现web静态服务器对多媒体文件的支持
前几天,一个同事说他写的web静态服务器不支持音视频的播放,现简单实现一下. 原理:实现http1.1协议的range部分. 其实这一点都不神秘,我们常用的下载工具,如迅雷,下载很快,还支持断点续传, ...
- nodejs创建http服务器
之前有简单介绍nodejs的一篇文章(http://www.cnblogs.com/fangsmile/p/6226044.html) HTTP服务器 Node内建有一个模块,利用它可以很容易创建基本 ...
- 用http-server 创建node.js 静态服务器
今天做一本书上的例子,结果代码不能正常运行,查询了一下,是语法过时了,书其实是新买的,出版不久. 过时代码如下 var connect=require('connect'); connect.crea ...
- http-server 基于nodejs的http服务器
http-server所用场景: 作为前端的同学来说,想要运行一段代码,但又没有必要使用tomcat或是Apache http server,这个时候,一个简单的轻量的http-server就能搞定. ...
- node的两种随起随用静态服务器搭建
一. anywhere Anywhere是一个随启随用的静态服务器,它可以随时随地将你的当前目录变成一个静态文件服务器的根目录. 1.确定电脑上安装了node.js 2.在当前所在项目文件夹下输入 ...
- NodeJS搭建HTTPS服务器
[NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d
- nodejs,node原生服务器搭建实例
nodejs,node原生服务器搭建实例
- nginx 一二事(2) - 创建虚拟静态服务器
一.什么是nginx 是一个C语言开发的HTTP反向代理服务器,性能非常高 一个俄罗斯的哥们开发的,官方提供的测试性能能够达到5W的并发,我的天呐~,实际测试差不多是2W,而淘宝的牛人可以优化到200 ...
随机推荐
- 主要的核心思想是取cookie然后发查询请求,不需要浏览器做代理(转)
需求是催生项目和推进项目的不竭动力. 背景: 最近,因为媳妇要做个B超检查,想着去大医院查查应该更放心,所以就把目标瞄准在A医院.早已耳闻A院一号难求万人空巷,所以把所有能接触到的机会都看了一遍,线下 ...
- 一般报java.lang.NullPointerException的原因有以下几种
一般报java.lang.NullPointerException的原因有以下几种: ·字符串变量未初始化: ·接口类型的对象没有用具体的类初始化,比如: List lt; 会报错 List lt = ...
- Git双机同步
如果使用git init 初始化,当客户端仓库push内容时,服务器端仓库可以看到log,但是更新的文件不能显示,必须使用git reset --hard才能更新内容
- 讨论asp.net通过机器cookie仿百度(google)实现搜索input搜索提示弹出框自己主动
为实现自己主动弹出通过用户输入关键词相关的搜索结果,在这里,我举两个解决方案,对于两个不同的方案. 常用的方法是建立一个用户数据库中查找关系表.然后输入用户搜索框keyword异步调用数据表中的相关数 ...
- 用JavaScript实现网页动态水印
1.基本原理 页面加载后,通过javascript创建页面元素div,并在div元素中创建文本节点,展示水印内容 设置div元素样式,将其zIndex设置一个较高的值,并设置透明度,实现浮在页面的水印 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- cocos2dx的发展的例子2048(加入动画版)
网上找了很多写作教程2048.只是不知道卡的移动动画,我写了一个完美的动画版少. 开发步骤: 1,一个设计CardSprite类. 2,设计主游戏场景GameScene,实现游戏逻辑,加入动画逻辑. ...
- poj2348(博弈)
poj2348 给定两个数a,b,大的数能减少小的数的倍数,不能是的数小于0,谁先使得数等于0,谁就赢了 有三种情况 ① a % b ==0 这个状态是必胜的 ② a - b < b 这个状 ...
- 在WPF中使用PlaneProjection模拟动态3D效果
原文:在WPF中使用PlaneProjection模拟动态3D效果 虽然在WPF中也集成了3D呈现的功能,在简单的3D应用中,有时候并不需要真实光影的3D场景.毕竟使用3D引擎会消耗很多资源,有时候使 ...
- Java Web整合开发(80) -- EJB & WebService
1. jdk-6u18-windows-i586-p.execlasspath: .;%JAVA_HOME%lib/tools.jar;%JAVA_HOME%lib/dt.jar;%JAVA_HOME ...