赞
踩
node静态文本服务器设置响应头响应时添加Expires头和Cache-Control: max-age头失败
我自己尝试写了一个node的静态文本服务器,可是设置响应头响应时添加Expires头和Cache-Control: max-age头老是失败。
这个是server.js
const http = require('http');
const parse = require('url').parse;
const _path = require('path');
const fs = require('fs');
let port = 4000;
const mime = require('./server/mime.js').types;
const config = require('./server/config.js');
let root = __dirname;
let server = http.createServer((req, res)=> {
// 实现路由, 得到URL的pathname,以确定被请求文件的路径
let url = parse(req.url).pathname;
let path = _path.join(root, url);
let ext = _path.extname(path);
ext = ext ? ext.slice(1) : 'unknown';
//响应之前判断后缀名是否符合要添加过期时间头的条件。
if (ext.match(config.Expires.fileMatch)) {
let expires = new Date();
expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);
res.setHeader("Expires", expires.toUTCString());
res.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
}
let contentType = mime[ext] || 'text/plain';
fs.stat(path, (err, stats)=> {
//注册error事件处理器,可以捕获任何可以预见或无法预见的错误
if (err) {
if ('ENOENT' == err.code) {
res.statusCode = 404;
res.end('Not Found');
} else {
res.statusCode = 500;
res.end('Internet Server Error');
}
} else {
res.writeHead(200, {'Content-Type': contentType});
//用STREAM.PIPE()优化数据传输
let stream = fs.createReadStream(path);
stream.pipe(res);
stream.on('error', (err)=> {
res.statusCode = 500;
res.end('Internet Server Error')
})
}
})
});
server.listen(port, ()=> {
console.log('server has connected :' + port);
});
这个是config.js
exports.Expires={
fileMatch: /^(gif|png|jpg|js|css)$/ig,
maxAge: 60 * 60 * 24 * 365
};
这个是mime.js
exports.types = {
"css": "text/css",
"gif": "image/gif",
"html": "text/html",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "text/xml"
};
我重复刷新页面后Expires头和Cache-Control: max-age头没有发生变化
初学node,写静态文本服务器,希望大神能帮帮我。
不好意思,当时代码贴错了。。。
相关阅读:
写vuejs的时候,用到es6的箭头函数,浏览器chrome 53可以直接运行吗?
Sortable.js 插件 怎么保存排序后的顺序?
怎么实现访问网站文件白名单功能
JS拼接HTML基本语法join()怎么理解?
在写Hexo Theme / 在Hexo的博客内容被渲染时中,如何不让HTML字符串被转义?
稀疏矩阵的存储和计算的问题?
react子组件的render方法执行了两遍
mongodb 显示不出中文,都是方块,该如何解决?
elementUI中的select组件,文档没有提供默认选中的方法,有什么别的办法能够做到默认选中的状态吗?
推荐一下验证码识别的python代码
手机滚动条问题
微信长按base64图片,先弹出复制,后出现保存
chrome的问题
.htaccess 隐藏index.php 并使用pathinfo 资源文件路径错误不报错
vue 在页面加载的时候会重绘app区域内所有节点吗?
高级程序设计 插件检测中的疑惑
Bootstrap中导航条滚动时的动画效果
java这么烂为什么还有那么多人用?
docx4j word转pdf 中文宋体(中文正文)类型转换乱码
有没有不需要配置模板的短信API
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。