2011-08-29 82 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') 
)