express源码实现现5——静态服务器

什么是静态服务器

-当浏览器向服务器发送请求时,一部分请求是用户主动发送的——比如表单的提交。还有一部分是浏览器页面渲染过程中自动向后端发送的请求——比如对css文件、对图片的请求。这后面一部分文件有一个特点——他们不会经常改变,是作为静态文件存在于服务器的。
-这部分文件如果也像其他文件一样每一个都设置一个请求回调,将会十分繁琐。这时候就需要一个能自动加载静态文件的插件。在express中通过中间件的形式实现。

原理

在优先级很高的中间件中指定一个静态文件夹,每次响应请求时都会先搜索一遍静态文件夹,如果找到匹配的文件就返给客户端。

源码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var fs=require('fs');
var path=require('path');
//作为中间件使用
module.exports=function (p) {
return function (req,res,next) {
var file=path.join(p,req.path);
fs.exists(file,function (exist){
//如果文件存在则发送给客户端
if (exist&&file!='/') {
fs.createReadStream(file).pipe(res);
} else next();
})
}
}