- async request(req, res) {
- //先取到客户端想要的是文件或文件夹路径
- let { pathname } = url.parse(req.url);//获取路径的文件信息
- let filepath = path.join(this.config.root, pathname);//办事器上的对应办事器物理路径
- try {
- let statObj = await stat(filepath);//获取路径的文件信息
- if (statObj.isDirectory()) {//如不雅是目次的话,应当显示目次 下面的文件列表
- let files = await readdir(filepath);//攫取文件的文件列表
- files = files.map(file => ({//把每个字符串变成对象
- name: file,
- url: path.join(pathname, file)
- }));
- //handlebar 编译模板
- let html = this.list({
- title: pathname,
- files
- });
- res.setHeader('Content-Type', 'text/html');设置请求头
- res.end(html);
- } else {
- this.sendFile(req, res, filepath, statObj);//攫取文件
- }
- } catch (e) {//不存在拜访内就发送缺点信息
- debug(inspect(e));//inspect把一个对象转成字符
- this.sendError(e, req, res);
- }
- }
缓存支撑/控制
设计思路
缓存分为强迫缓存和比较缓存:
- 两类缓存规矩可以同时存在,强迫缓存优先级高于比较缓存,也就是说,当履行强迫缓存的规矩时,如不雅缓存生效,直接应用缓存,不再履行比较缓存规矩.
- 强迫缓存如不雅生效,不须要再和办事器产生交互,而比较缓存不管是否生效,都须要与办事端产生交互
- 第一次拜访办事器的时刻,办事器返回资本懈弛存的标识,客户端则会把此资本缓存在本地的缓存数据库中。
- 第二乘客户端须要此数据的时刻,要取得缓存的标识,然后去问一下办事器我的资本是否是最新的。如不蚜?鲱新的则直接应用缓存数据,如不雅不是最新的则办事器返回新的资本懈弛存规矩,客户端根据缓存规矩缓存新的数据。
经由过程最后修改时光来断定缓存是否可用
- Last-Modified:响应时告诉客户端此资本的最后修改时光
- If-Modified-Since:当资本过不时(应用Cache-Control标识的max-age),发明资本具有Last-Modified声明,则再次向办事器请求时带上头If-Modified-Since。
推荐阅读
AICHAIN创始人段凯:AI+区块链 技术谱系极端的火花碰撞
全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修!作为一门用于模仿、延长和扩大人的智能的理论、办法、技巧及应用体系的新技巧科学,人工智能在历经元年的新一轮火爆之后,应>>>详细阅读
本文标题:静态文件服务器实现的功能
地址:http://www.17bianji.com/lsqh/40859.html
1/2 1