2011-08-29 115 views
2

我正试图将HTML5视频文件加载到iPad上。我正在使用node.js.这里是代码:有人可以帮助我在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); 
     }); 
    }; 
}; 

我真的不确定我在这里做什么,我需要使它流/缓冲区。

+3

不错'〜'技巧... – pimvdb

+0

nt确定我关注? –

+0

我并没有回答你的问题。只是发现你的'〜url.pathname.indexOf'对'〜'运算符有很好的用处。 – pimvdb

回答

1

该代码似乎试图实现连接中间件来提供静态文件。您是否尝试使用标准连接中间件来达到此目的?这里是一个例子:

var connect = require('connect') 
var server = connect.createServer(
    connect.logger() 
    , connect.static(__dirname + '/public') 
) 
相关问题