业务平台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. ElasticSearch实战系列十: ElasticSearch冷热分离架构

    前言 本文主要介绍ElasticSearch冷热分离架构以及实现. 冷热分离架构介绍 冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配.ES集群的索引写入及查询速度 ...

  2. c++一些概念

    面向对象语言三大特征: 封装,多态,继承 封装: 1.将函数定义到结构体内部,就是封装. 2.编译器会自动传递结构体的指针给函数. 类: 带有函数的结构体,称为类. 成员函数: 结构体里面的函数,称为 ...

  3. DDOS攻击与防御简单阐述,列出DDOS的攻击方法和防御方法

    参考1:https://www.hi-linux.com/posts/50873.html#%E7%BD%91%E7%BB%9C%E5%B1%82-ddos-%E6%94%BB%E5%87%BB 什么 ...

  4. 阅读《构建之法》之FAQ

    注:本文档已提交Github,地址是这个 欢迎大家通过PR的方式或者在本博客下留言的方式随时补充意见和建议,我们会持续更新 书中7.2.4的表7-1 MSF团队模型和关键质量目标里面提到的" ...

  5. java.net.BindException: Problem binding to [hadoop103:8031] java.net.BindException

    ResourceManger启动失败,Namenode启动成功,这个问题排查了好久 在hadoop-2.7.6/logs/yarn-root-resourcemanager-hadoop102.log ...

  6. 个人阅读作业#2——软工模式&CI/CD

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 从实践中学习软件工程相关知识(结构化分析和设计方法.敏捷开发方法.软 ...

  7. 用递归求n皇后问题

    此问题是指在n*n的国际象棋棋盘上 ,放置n个皇后,使得这n个皇后均不在,同一行,同一列,同一对角线上,求出合法的方案的数目. 本题可以简单转化为就是求n的全排列中的数放在棋盘上使得这几组数,符合均不 ...

  8. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之文件配置-08

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之文件配置-08 欢迎加QQ群:1026880196   进行交流学习 文件配置 #controller ...

  9. Spring学习笔记(五):JDBCTemplate+事务管理

    1 概述 Spring为开发者提供了JDBCTemplate,可以简化很多数据库操作相关的代码,本文主要介绍JDBCTemplate的使用以及事务管理功能. 2 JDBC Template 2.1 配 ...

  10. ECDSA密钥对生成以及在Token中的应用

    1 概述 本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程. 2 ECDSA 2.1 简介 ECC(Elliptic Curve Crypto ...