业务平台EasyBPM(易实管理软件)有一个功能是模板打印的功能。就是可以使用一个docx格式的模板,输出一个docx格式的单据的文档。

打印的逻辑是先从服务端获取模板,如果没有对应的模板,就提示先上传模板:

遇到的问题是,按照提示上传模板之后,再次打印依然会报没有模板。

缓存的问题

通过思考发现,可能的原因是因为使用了缓存。 后端使用Node + Express进行静态资源的发布。 通过Express发布的资源,默认会开启缓存。

所以当第一次去获取模板资源的时候,由于此时没有对应的模板,此时会跳转到404页面,返回给前端,前端解析404页面发现不是模板文件,就会提示没有模板文件。

之后上传了模板文件到后端的静态资源目录,再次去获取模板资源的时候,由于此时已经缓存的结果是404文件,所以前端获取的依然是404页面,而不是模板文件,因此会继续提示没有模板文件。

如果去掉缓存

要解决这个问题,就需要去掉模板文件的缓存功能。 一般来说,在请求的header上面可以可以设置不使用缓存。

但是一个简单的方式是,给url地址加上时间戳,比如如下代码:

 var getTemplateFunction = function () {
return `./print/${page.model.id}打印模板.docx?time=${new Date().getTime()}`;
};

在后面加上"?time=${new Date().getTime()}" 之后,由于每次请求的url地址都不在一样,这个时候就不会使用缓存,而是总是获取最新的文件。 这样就可以轻松解决了这个缓存的问题。

实践也是如此,加上时间戳之后,上述问题就不在复现了。

缓存

有关缓存的原理和相关知识 ,强缓存,协商缓存,Cache Control, Expires,from disk cache和from memory cache,ETag和If-None-Match,Last-Modified和If-Modified-Since等等,可以百度之,网上相关的介绍很多,此处不在赘述。

总结

其实想强调一点,底层认知还是很重要的,如果遇到这个问题,你至少要知道缓存相关的知识,才能够想到有可能是缓存导致的问题。 如果你都不知道缓存相关原理和知识,估计就很难想到了。

EasyBPM(易施业务流程管理平台),是一个低代码业务平台。 可以自定义物业表单,定义业务流程,审批流程,报表,权限等等。 通过该平台可以组建CRM,进销存,OA, 资产管理等业务管理平台。有兴趣的可以关注。

更多优秀内容,欢迎关注公众号 “易施管理软件EasyBPM” 。

EasyBPM打印模板的缓存问题的更多相关文章

  1. Smarty单模板多缓存

    Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存

  2. 针对应用程序池“xxxxxx”的模板永久性缓存初始化失败,解决方法

    日志名称:          Application 来源:            Active Server Pages 日期:            2014-11-22 9:09:39 事件 I ...

  3. iis7.5应用程序池模板永久性缓存初始化失败解决方法

    错误: 针对应用程序池的模板永久性缓存初始化失败,这是由以下错误导致的: 无法为应用程序池创建磁盘缓存子目录.数据可能包含其他错误代码. 解决办法如下: 网上搜索的答案全都是修改3个目录的权限,给II ...

  4. 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

    很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...

  5. C# C/S程序使用HTML文件作为打印模板

    C#   C/S程序使用HTML文件作为打印模板 在网上找了一堆的资料,整理到郁闷呀,慢慢试慢慢改.哎,最终成功了,哈,菜鸟伤不起呀 public partial class Print : Form ...

  6. 重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印

    重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端 ...

  7. U9单据打印模板自定义扩展字段显示名称

    UBF打印模板中,单据自定义扩展字段显示均为扩展字段值集值编码,而在实际运用过程中打印时需要显示扩展字段名称,具体实现方法如下 方式一:采用SQL系统定义函数[dbo].[fn_GetSegName] ...

  8. arcgis server10.7修改打印模板后前台调用不生效

    在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...

  9. C#打印模板设计,E店宝打印模板设置,winfrom打印模板设计,DevExpress.XtraReports.UI.XRTable 表格代码生成。

    一.打印效果 二.代码编辑 1 .table1 : table控件的Name: 2.label33 :label控件 实现绑定[外部平台单号]的控件: 3.label32:绑定[E店宝订单编号](S开 ...

随机推荐

  1. CrashLoopBackOff的解决办法之一

    问题来源 # kubectl get pods -n assembly NAME READY STATUS RESTARTS AGE alertmanager-858b7749c5-6jsfh 0/1 ...

  2. DAOS 分布式异步对象存储|数据平面

    DAOS 通过两个紧密集成的平面进行运转.数据平面处理繁重的运输操作,而控制平面负责进程编排和存储管理,简化数据平面的操作. 模块接口 I/O 引擎支持一个模块接口,该接口允许按需加载服务器端代码.每 ...

  3. 201871030131-谢林江 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.学习编写PSP2.完成个人项目实验要求3.在Github建仓 这个作业在哪些方面帮助我实现学习目标 1.首次编 ...

  4. Python数据分析入门(十七):绘制条形图

    条形图的绘制方式跟折线图非常的类似,只不过是换成了plt.bar方法.plt.bar方法有以下常用参数: x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点. height:一个数组或者列表,代 ...

  5. CppCon 2019 | Back to Basics: RAII and The Rule of Zero

    本文整理了Arthur O'Dwyer在CppCon 2019上关于RAII的演讲,演讲的slides可以在此链接进行下载. 在C++程序中,我们往往需要管理各种各样的资源.资源通常包括以下几种: A ...

  6. 前端进阶(1)Web前端性能优化

    前端进阶(1)Web前端性能优化 Web前端性能优化, 不仅能够改善站点的用户体验,并且能够节省相当的资源利用.下面将从1)服务器.2)html内容.3)css. 4)javascript. 5)图片 ...

  7. spring boot 通过feign调用api接口

    目的:远程调用服务器api,直接上步骤: 1,添加maven依赖,这是必须的: <dependency> <groupId>org.springframework.cloud& ...

  8. 1.人工智能解读与Python简介

    人工智能解读 Python解读 Python 简介 1.程序员: 程序设计人员. 2.程序: 一组计算机能识别和执行的指令,是实现某种需求的软件. 3.操作系统: 管理和控制计算机软件与硬件资源的程序 ...

  9. 多维数据处理之主成分分析(PCA)

    在灵巧手与假手理论中,为了研究人手的运动协同关系,需要采集各个关节的运动学量或者多个采集点的肌电信号,然而由于人手关节数目或者EMG采集点数量较多,加上多次采样,导致需要过多的数据需要处理.然而事实上 ...

  10. hdu4081 最小树+DFS或者次小树的变形

    题意:       给你一个全图,在里面找到一棵树,这棵树最多只有一条边可以不是最小树(也可以是), 要求 那对特殊的边的两个权值/除了这条边其他边的和最大. 思路:      方法有很多,最少有三种 ...