index.js
var http = require('http'),
fs = require('fs');
var server = http.createServer(function(req,res){
if(req.method == 'GET' && req.url.substr(0,7) == '/images' && req.url.substr(-4) == '.jpg'){
fs.stat(__dirname + req.url,function(err,stats){
if(err || !stats.isFile()){
res.writeHead(404);
res.end('Not Found');
return;
}
serve(__dirname + req.url,'application/jpg');
console.log(req.url);
});
}else if(req.method == 'GET' && req.url == '/'){
serve(__dirname + '/index.html','text/html');
console.log(req.url);
}else{
res.writeHead(404);
res.end('Not Found');
console.log(req.url);
}
function serve(path,type){
res.writeHead(200,{'Content-Type':type});
fs.createReadStream(path).pipe(res);
}
});
server.listen(3000);
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>My webite</h1>
<img src="/images/1.jpg">
<img src="/images/2.jpg">
<img src="/images/3.jpg">
<img src="/images/4.jpg">
</body>
</html>
目录
directory.pngcmd
cmd.png访问127.0.0.1:3000,控制台输出 "" 后输出index.html各图片src,理解为请求html文档后,在文档中发现src继续请求服务器中目录,故在服务器文件index.js中符合第一个判断,并把文件的url赋值给Stream流(serve函数使用Stream流),在Stream流中,通过res响应输出文件。
所以此过程中访问服务器5次,除去第一次访问,234次分别输出3张图,最后一次没有找到文件,返回函数。
网友评论