基本文件服务器
2014-12-24 本文已影响133人
云香水识
- 从官方首页一个hello world出发, 先构建一个httpServer
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
使用http.createServer开启一个本地对1337端口的监听,接受到请求后,返回一个文本类型的相应,内容为 "Hello World\n"。 这里有几个WEB基础知识点:
1. 200: HTTP 状态消息 服务端返回的状态消息用来告诉浏览器这个请求是否成功。
1. {'Content-Type': 'text/plain'}
: MIME-type 服务端返回的相应内容类型,浏览器根据该类型解析响应的内容(网页、图片、音频、视频、xml等)。
-
完成一个文件服务器,除了基本的服务器监听以外,最重要的是文件系统的数据读取,这里需要查看来自fs模块的 API:
- fs.stat(path, callback):检测文件[夹]是否存在。
- fs.createReadStream(path, [options]):创建文件读取的流,返回一个fs.ReadStream对象
- fs.ReadStream:标准的读取流的API,可以通过readable.pipe(destination, [options]) 方法,将读取结果配接到请求响应response上面。
- 如果文件不存在: 直接使用response.end() 输出一个404的响应结果。
- 当然你也可以使用fs的其他方法完成这里的功能,如:直接获取文件结果内容的readFile 或者 readFile 等。
-
另外: 可以根据请求路径的后缀,识别请求结果数据的MIME-type,这里就需要用到mime模块了,这个可以直接使用
$npm install mime
安装,详细的api可以参见Github: https://github.com/broofa/node-mime
PS,完整代码如下:
"use strict";
var mime = require("mime"), //MIME类型
http = require("http"),
fs = require("fs");
http.createServer(function(req,resp){
var root = "",
pathname = decodeURI(req.url).substring(1);
fs.stat(root + pathname, function(error, stats){
if(!error && stats && stats.isFile && stats.isFile() ){
resp.writeHead(200, {
"Content-Type": mime.lookup(pathname) || 'text/html'
});
fs.createReadStream(pathname).pipe(resp);
}else{
resp.writeHead(404, {
"Content-Type": 'text/html'
});
resp.end("404");
}
});
}).listen(8888);