我自己尝试写了一个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,写静态文本服务器,希望大神能帮帮我。
不好意思,当时代码贴错了。。。
少了代码呢,下面的代码加在//注册error事件处理器,可以捕获任何可以预见或无法预见的错误这句注释上面
你的const config = require('./server/config.js');引入进来都没使用,怎么可能在头里面出现你说的信息呢!希望对你有帮助。