EasyBPM打印模板的緩存問題

  • 2021 年 5 月 23 日
  • 筆記

業務平台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」 。