基本文件服务器

  • 从官方首页一个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);

你可能感兴趣的:(基本文件服务器)