標籤:style http io ar color os sp java for
zhanhailiang 日期:2014-11-23
原理:
- 通過解析請求url來解析到相應檔案路徑;
- 判斷檔案是否存在;
- 若存在,則讀取檔案內容輸出;
實現:
var path = require(‘path‘), fs = require(‘fs‘); require(‘http‘).createServer(function(req, res) { // 解析檔案路徑,預設以目前的目錄為根目錄尋找檔案 // 這裡可以通過配置root值來做為相對根目錄尋找檔案 var file = path.normalize(‘.‘ + req.url); console.log(‘Trying to serve‘, file); function reportError(err) { console.log(err); res.writeHead(500); res.end(‘Internal Server Error‘); } // 判斷檔案是否存在 path.exists(file, function(exists) { // 檔案存在,則讀取檔案流,輸出 if (exists) { fs.stat(file, function(err, stat) { var rs; if (err) { return reportError(err); } if (stat.isDirectory()) { res.writeHead(403); res.end(‘Forbidden‘); } else { rs = fs.createReadStream(file); rs.on(‘error‘, reportError); res.writeHead(200); rs.pipe(res); } }); // 404 } else { res.writeHead(404); res.end(‘Not found‘); } });}).listen(4000);
完整源碼:https://github.com/billfeller/professional-nodejs/tree/master/chapter11
參考:<Professional Node.js> Chapter11 Building HTTP Servers
最後:
以上只是一個實現靜態伺服器的樣本,生產應用仍然首選Nginx。
基於Node.js搭建靜態伺服器