在官方建議寫法一般是這樣
但你也可以這樣寫
這樣寫有什麼好處呢,主要防止邏輯四散,每個人寫作習慣不同,mounted跟destroyed不一定就在旁邊,有人mounted會寫一大串,最造成閱讀上沒這麼直覺。你可以在宣告偵聽時就確定他會在component destroyed時被取消偵聽減少資源浪費。這寫法就跟golang的defer類似。
其實早在很久前就有這樣寫了,只是沒記下來真的會忘記,到最近又碰到vue想要寫才把這招翻出來,所以就做個紀錄
在官方建議寫法一般是這樣
但你也可以這樣寫
這樣寫有什麼好處呢,主要防止邏輯四散,每個人寫作習慣不同,mounted跟destroyed不一定就在旁邊,有人mounted會寫一大串,最造成閱讀上沒這麼直覺。你可以在宣告偵聽時就確定他會在component destroyed時被取消偵聽減少資源浪費。這寫法就跟golang的defer類似。
其實早在很久前就有這樣寫了,只是沒記下來真的會忘記,到最近又碰到vue想要寫才把這招翻出來,所以就做個紀錄
先附上我寫的docker-compose
情境說明
我在構思前後端架構時,後端用nodejs,然後前端用nginx,這沒什麼問題,然後因為要走ssl,我懶得把ssl key也copy到後端專案,打算直接在nginx用proxy的方式做掉,OK事情就是這樣發生了,先附上docker-compose跟nginx設定
這一切乍看之下都很完美,但實際在打https://127.0.0.1:3333卻會報502,意思就是打不到東西,我一開始是想是不是node-api讀不到的關係,查了很多關於links, depends_on, networks的文件,最後進到nginx container裡面實際下指令nslookup node-api也確實有,ping也ping得到
後來我發現,我啟動的container也只有兩個,但ip卻有三個
172.23.0.1
172.23.0.2 <= node-api
172.23.0.3 <= nginx
ok問題來了,照上面指令2應該就是node-api,3應該是nginx,那1是什麼呢?我繼續下指令curl -G http://172.23.0.1:8000
矮油這下問題嚴重了,我一度以為docker出問題,把host name指向錯誤的主機,想上網找但關鍵字也不知道怎麼下
後來在苦無對策之際,最後試著下一個指令
一切都真相大白了,我一直以為container是在各自的容器(我不知道這專有名詞是啥,只是講container會搞混,在我想像中他形式比較像沙箱跟區網的概念,將箱子也不好聽,所以就叫中文的容器吧),藉由expose把port開出來讓外界使用,事實上如果用docker-compose那大家就會在同一個容器內,所以網內互打是打原本的port不是export的port,所以1應該就是最後所有container的集合....吧,所以最終只要這樣修改就好。
因此最終node-api的ports設定也可以拿掉。
我也不是專業的devpos,就是專案需要所以簡單地摸了一下,踩了坑就記錄一下,歡迎不大家吝嗇指教,只是希望可以噴得小力一點!
需求是某些地區只能打domain,有些地區只能打ip,所以pm要求我寫一個retry的功能,當一個不通在打另外一個
但這有個問題,就是等打了兩遍都打不通時間都過去十秒了,真的有人願意等這麼久嗎?所以我突發奇想,為什麼不兩個網址都打,哪個通就走哪個,所以我又改成以下
這樣體驗好多了
1/19調整一下,如果使用any回來的是無效網址那就會壞掉
所以須改用Promise.all(urls.map(url => axios.get(url, {timeout: 3000})).then(urls => urls.filter(x =>x)[0])
前言:上篇提到我加了@vite/plugin-lagacy讓畫面成功渲染了,但打某支api卻會報錯promise rejection.....
我一開始想說是不是沒有支援Promise,我一直嘗試在polyfills塞入各種套件,但始終沒有解決。一直到我後來思考,不對啊,首頁就打了數隻api都沒事,為什麼到該頁打該api才會報!應該是該api有問題,但看來看去底層是一樣的,為什麼只有這隻會報.....
最終找不到辦法,因為我手上也頂多只有6s手機,無法進行除錯,只好到這個網站:https://vikyd.github.io/download-chromium-history-version/#/,下載舊版的chromium看能否模擬事件發生。好在在46版時發生了,然後我在報錯訊息中多看到幾個字“AbortController”,原來是我為了讓fetch有timeout,所以使用了這個物件,但這個物件載舊版瀏覽器上沒有,所以報錯,並非是沒有promise polyfill,所以我把AbortController加上一些判斷如下
變成有就5秒timeout沒有就預設30秒,呵呵,事情就解決了!!撒花~~
前言:公司客服反映有八年前android(chrome)跟十年前5s(safari),打開網頁看不到畫面,換台3000塊以上的手機很難嗎==這要求跟要我支援ie差不多吧,好在客戶群沒很大,老闆就沒逼很急,所以花了點時間研究,做一下紀錄。
簡單說就是vite有出一個plugin:@vite/plugin-lagacy,看名字應該看得出來是為了骨灰級瀏覽器而有的,新的瀏覽器都支援ESM,然而不支援ESM的瀏覽器只好使用pollyfill去讓他被支援,詳細配置如下
基本上配置這樣就可以了,我都支援到ie11了總可以放過我了吧。確實在同事口中傳回來捷報說有畫面了,但是!人生最可怕的就是這個但是,但是在打某支api會出現,promise rejection.....
只好下一篇待續
前言:在公司前輩的要求提醒之下,把png檔都轉為webp檔,說這樣除了檔案較小,也可以增加載入的速度(據說是協議有特別優化過)。在開發期間都相當順利,沒想到上正式機卻發生圖出不來,原因是因為測試機是linux,正式機是window(別問我為什麼,每間公司都有本難念的經),然而在iis上預設是不支援webp的,之後的是可想而知,所以我做一下紀錄。
點開MIME類型
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".webp" mimeType="image/webp" />
</staticContent>
</system.webServer>
</configuration>參考網站:https://www.itnota.com/serving-webp-image-iis/
在原先規劃系統設計是去讀src/pages/裡面有index.jsx?的頁面,搞得跟next.js類似
事實上這樣也不難,在vite.config.js這樣寫就好