使用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静态服务器的更多相关文章

  1. 安装nodeJs静态服务器(NodeJs Express MVC 框架)

    安装 NodeJs Express MVC 框架   新建项目文件夹   打开cmd 执行以下操作:   一.使用Express框架 1)安装express3 $: npm install -g ex ...

  2. Nodejs实现web静态服务器对多媒体文件的支持

    前几天,一个同事说他写的web静态服务器不支持音视频的播放,现简单实现一下. 原理:实现http1.1协议的range部分. 其实这一点都不神秘,我们常用的下载工具,如迅雷,下载很快,还支持断点续传, ...

  3. nodejs创建http服务器

    之前有简单介绍nodejs的一篇文章(http://www.cnblogs.com/fangsmile/p/6226044.html) HTTP服务器 Node内建有一个模块,利用它可以很容易创建基本 ...

  4. 用http-server 创建node.js 静态服务器

    今天做一本书上的例子,结果代码不能正常运行,查询了一下,是语法过时了,书其实是新买的,出版不久. 过时代码如下 var connect=require('connect'); connect.crea ...

  5. http-server 基于nodejs的http服务器

    http-server所用场景: 作为前端的同学来说,想要运行一段代码,但又没有必要使用tomcat或是Apache http server,这个时候,一个简单的轻量的http-server就能搞定. ...

  6. node的两种随起随用静态服务器搭建

      一. anywhere Anywhere是一个随启随用的静态服务器,它可以随时随地将你的当前目录变成一个静态文件服务器的根目录. 1.确定电脑上安装了node.js 2.在当前所在项目文件夹下输入 ...

  7. NodeJS搭建HTTPS服务器

    [NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d

  8. nodejs,node原生服务器搭建实例

    nodejs,node原生服务器搭建实例

  9. nginx 一二事(2) - 创建虚拟静态服务器

    一.什么是nginx 是一个C语言开发的HTTP反向代理服务器,性能非常高 一个俄罗斯的哥们开发的,官方提供的测试性能能够达到5W的并发,我的天呐~,实际测试差不多是2W,而淘宝的牛人可以优化到200 ...

随机推荐

  1. VS2008--无法找到“XXX.exe”的调试信息,或者调试信息不匹配

    ------解决方案----- 1. 关闭掉Visual Studio 实例. 2. 找到解决方案下的.suo文件并删除之. 3. 重新启动Visual Studio,或者直接双击.sln文件打开 4 ...

  2. Multitasking Apps may only use background services for their intended purposes

    2.16 Details Your app declares support for audio in the UIBackgroundModes key in your Info.plist, bu ...

  3. 上传App时遇IDFA错误问题

    今天上传App时遇到下图1的情况,很纳闷,又是苹果新规. 通常是第三方的库引起啦,马上想到百度统计了,打开SDK下载页面看看简单介绍,里面有讲到这个问题了. 图2就是这次改动的原因. 更新SDK,之前 ...

  4. 什么是IT

    这个是同事总结的,我补充了若干项,算不上原创,但这个没有在其他地方看到,在这儿权且当原创了.后面再配个软件架构图吧.看到缺的同学能够补充 什么是IT:Information-信息Technology- ...

  5. BestCoder Round#11div2 1003

    ----- 有时候如果枚举起点超时,那么试试枚举终点. 枚举每一个i为终点(0<= i < n),且维护起点下标startPos 对于终点i,cnt[str[i]] ++,   如果小于等 ...

  6. SoccerLeagueDB

    create table if not exists League ( lid int primary key auto_increment,      lyear int not null,   s ...

  7. C#依据进程名称获取进程的句柄?

    C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...

  8. HDU 3836 Equivalent SetsTarjan+缩点)

    Problem Description To prove two sets A and B are equivalent, we can first prove A is a subset of B, ...

  9. Codeforces Round #223 (Div. 2)--A. Sereja and Dima

    Sereja and Dima time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  10. tolower (Function)

    this is a function that Convert uppercase letter to lowercase Converts c to its lowercase equivalent ...