Базовый статический файловый сервер в NODEJS

Я пытаюсь создать статический файловый сервер в Nodejs больше как упражнение для понимания узла, чем в качестве идеального сервера. Я хорошо знаю, что проекты, такие как Connect и Node-Static, и полностью намерены использовать эти библиотеки для более готового кода, но я также люблю понимать основы того, с чем я работаю. С учетом этого я закодировал небольшой сервер.js:

var http = require('http'),
    url = require('url'),
    path = require('path'),
    fs = require('fs');
var mimeTypes = {
    "html": "text/html",
    "jpeg": "image/jpeg",
    "jpg": "image/jpeg",
    "png": "image/png",
    "js": "text/javascript",
    "css": "text/css"};

http.createServer(function(req, res) {
    var uri = url.parse(req.url).pathname;
    var filename = path.join(process.cwd(), uri);
    path.exists(filename, function(exists) {
        if(!exists) {
            console.log("not exists: " + filename);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.write('404 Not Found\n');
            res.end();
        }
        var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
        res.writeHead(200, mimeType);

        var fileStream = fs.createReadStream(filename);
        fileStream.pipe(res);

    }); //end path.exists
}).listen(1337);

Мой вопрос в два раза

  1. это «правильный» способ пойти на создание и потоковую передачу базового HTML и т. Д. в узле или есть лучший / Более элегантный / более надежный метод?

  2. - это .pipe () в узле, в основном просто выполняя следующее?

.

var fileStream = fs.createReadStream(filename);
fileStream.on('data', function (data) {
    res.write(data);
});
fileStream.on('end', function() {
    res.end();
});

Спасибо всем!

84
задан yojimbo87 1 September 2011 в 08:56
поделиться