nodejs一个简单的文件服务器的创建方法
简单的文件服务器
有时候,我们想读取一些服务器上的文件,但是又不想写太复杂的程序,可以考虑用nodejs,可以很简单的写出一个文件服务器
下面是我写的一个简单的文件服务器,附带缓存功能,这是github链接,或者直接复制下面的代码运行即可,需要安装mime的依赖
constport=3004;//端口号 consthttp=require('http'); consturl=require('url'); constfs=require('fs'); constpath=require('path'); constmime=require('mime'); constSTATIC_FOLDER='public';//默认读取public文件夹下的文件 constIS_OPEN_CACHE=true;//是否开启缓存功能 constCACHE_TIME=10;//告诉浏览器多少时间内可以不用请求服务器,单位:秒 constserver=http.createServer((req,res)=>{ constobj=url.parse(req.url);//解析请求的url letpathname=obj.pathname;//请求的路径 if(pathname==='/'){ pathname='./index.html'; } constrealPath=path.join(__dirname,STATIC_FOLDER,pathname);//获取物理路径 //获取文件基本信息,包括大小,创建时间修改时间等信息 fs.stat(realPath,(err,stats)=>{ letendFilePath='',contentType=''; if(err||stats.isDirectory()){ //报错了或者请求的路径是文件夹,则返回404 res.writeHead(404,'notfound',{ 'Content-Type':'text/plain' }); res.write(`therequest${pathname}isnotfound`); res.end(); }else{ letext=path.extname(realPath).slice(1);//获取文件拓展名 contentType=mime.getType(ext)||'text/plain'; endFilePath=realPath; if(!IS_OPEN_CACHE){ //未开启缓存 letraw=fs.createReadStream(endFilePath); res.writeHead(200,'ok'); raw.pipe(res); }else{ //获取文件最后修改时间,并把时间转换成世界时间字符串 letlastModified=stats.mtime.toUTCString(); constifModifiedSince='if-modified-since'; //告诉浏览器在规定的什么时间内可以不用请求服务器,直接使用浏览器缓存,不过貌似没有生效,需要再学习一下为什么 letexpires=newDate(); expires.setTime(expires.getTime()+CACHE_TIME*1000); res.setHeader("Expires",expires.toUTCString()); res.setHeader('Cache-Control','max-age='+CACHE_TIME); if(req.headers[ifModifiedSince]&&lastModified===req.headers[ifModifiedSince]){ //请求头里包含请求ifModifiedSince且文件没有修改,则返回304 res.writeHead(304,'NotModified'); res.end(); }else{ //返回头Last-Modified为当前请求文件的最后修改时间 res.setHeader('Last-Modified',lastModified); //返回文件 letraw=fs.createReadStream(endFilePath); res.writeHead(200,'ok'); raw.pipe(res); } } } }); }); server.listen(port); console.log(`serverisrunningathttp://localhost:${port}`)
不过目前还有一点问题,服务器缓存返回304,还有修改文件后,再次请求会返回最新文件这个功能目前没有问题,不过设置的Cache-Control和Expires后,在规定的时间内还是会请求服务器,这个还需要再看一下怎么回事,要是有人了解的话可以告诉我一下,谢谢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。