当前位置: 首页 > 后端技术 > Node.js

基于Node的Axure文件在线预览

时间:2023-04-03 16:44:00 Node.js

前言公司目前产品Axure文档生成后,通过git进行管理。每次更新文件,大家需要从git中拉取,然后在本地查看,就会出现更新不及时的问题。有时人们忘记从git中拉取,会导致实现效果与最终的产品草案不一致。最近在看Koa,所以通过githooks和Koa实现了在线预览。实现大概是根据访问路径找到指定的目录,然后遍历该目录,然后根据目录和文件类型的区分返回相应的数据。实施过程中的注意事项。Git服务器上的文件都在.Git文件夹下,所以我们无法获取到它的文件目录。实现方式是通过gitclone克隆,然后通过githook的方式,当有push操作时,执行gitpull将文件拉取到本地,这样就实现了实时更新该文件将被实现。对于文件的返回,图片文件的读取方式要以二进制方式读取,对于其他文件,如css、js等,要以utf-8方式读取。显示出来了,但是js执行报错。现实代码如下constKoa=require('koa');constpath=require('path');constfs=require('fs');letmimes={'css':'text/css','html':'text/html','jpg':'image/jpeg','jpeg':'image/jpeg','json':'application/json','js':'text/javascript','xml':'text/xml','png':'image/png','pdf':'application/pdf','less':'text/css','gif':'image/gif','txt':'text/plain','tiff':'image/tiff','svg':'image/svg+xml'};//扫描dirfunctionwalk(reqPath){letfiles=fs.readdirSync(reqPath);让fileList=[];for(leti=0,len=files.length;i产品文档

    ';如果(url=='/'){url='';}for(let[index,item]ofcontentList.entries()){letrealHref=url+'/'+item;让realItem=item.split('/');结果+='
  • '+realItem[0]+'
  • ';}结果=结果+'
';返回结果;}异步函数文件(url,文件路径){让resultMime=parseMime(url);让内容;如果(resultMime&&resultMime.indexOf('image/')>=0){content=fs.readFileSync(filePath,'binary');}else{content=fs.readFileSync(filePath,'utf8');}返回内容;}异步函数内容(ctx,fullStaticPath){让url=decodeURI(ctx.url);让reqPath=path.join(fullStaticPath,url);让存在=fs.existsSync(reqPath);让内容='';if(!exist){content='本地文件不存在';}else{让stat=fs.statSync(reqPath);如果(stat.isDirectory()){content=dir(ctx.url,reqPath);}else{content=awaitfile(ctx.url,reqPath);}}returncontent;}functionparseMime(url){让extName=path.extname(url);分机名=分机名?extName.slice(1):'未知';returnmimes[extName];}constapp=newKoa();conststaticPath='../onlinedoc';`请输入代码`app.use(async(ctx)=>{让fullStaticPath=path.join(__dirname,staticPath);让resultContent=等待内容(ctx,fullStaticPath);让resultMime=parseMime(ctx.url);如果(resultMime){ctx.type=resultMime;}if(resultMime&&resultMime.indexOf('image/')>=0){ctx.res.writeHead(200);ctx.res.write(resultContent,'binary');ctx.res.end();}else{ctx.body=resultContent;}});app.listen(8080,()=>{console.log('Running');});