Может кто-нибудь помочь мне настроить буфер в Node.Js? - PullRequest
2 голосов
/ 29 августа 2011

Я пытаюсь загрузить html5 видеофайлы на iPad. Я использую node.js. Вот код:

return function staticProvider(req, res, next) {
        if (req.method != 'GET' && req.method != 'HEAD') return next();

        var hit, 
            head = req.method == 'HEAD',
            filename, url = parseUrl(req.url);

        // Potentially malicious path
        if (~url.pathname.indexOf('..')) {
        console.log("forbidden", url.pathname);
            return forbidden(res);
        }

        // Absolute path
        filename = Path.join(root, queryString.unescape(url.pathname));

        // Index.html support
        if (filename[filename.length - 1] === '/') {
            filename += "index.html";
        }

        // Cache hit
        if (cache && !conditionalGET(req) && (hit = _cache[req.url])) {
            res.writeHead(200, hit.headers);
            res.end(head ? undefined : hit.body);
            return;
        }

        fs.stat(filename, function(err, stat){

            // Pass through for missing files, thow error for other problems
            if (err) {
                return err.errno === process.ENOENT
                    ? next()
                    : next(err);
            } else if (stat.isDirectory()) {
                return next();
            }

            // Serve the file directly using buffers
            function onRead(err, data) {
                if (err) return next(err);

                // Response headers
                var headers = {
                    "Content-Type": mime.lookup(filename),
                    "Content-Length": stat.size,
                    "Last-Modified": stat.mtime.toUTCString(),
                    "Cache-Control": "public max-age=" + (maxAge / 1000),
                    "ETag": etag(stat),
                    "Accept-Ranges": "bytes"
                };

                // Conditional GET
                if (!modified(req, headers)) {
                    return notModified(res, headers);
                }

                res.writeHead(200, headers);
                res.end(head ? undefined : data);

                // Cache support
                if (cache) {
                    _cache[req.url] = {
                        headers: headers,
                        body: data
                    };
                }
            }

            fs.readFile(filename, onRead);
        });
    };
};

Я действительно не уверен, что я делаю здесь, и мне нужно сделать его поток / буфер.

1 Ответ

1 голос
/ 20 сентября 2011

Код, по-видимому, является попыткой реализовать связующее ПО для обслуживания статических файлов. Вы пытались использовать стандартное промежуточное ПО для подключения? Вот пример:

var connect = require('connect')
var server = connect.createServer(
    connect.logger()
  , connect.static(__dirname + '/public')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...