今年公司的架構開始轉為 microservice + event driven,我們選擇 AWS MSK 託管 Kafka broker 以提供系統各 service 之間的溝通橋樑。
在一次 MSK upgrade 時,Kafka broker 重啓居然造成系統的 producer 無法 publish event,導致 streaming pipeline 短暫失常。
這篇文章記錄問題的發生原因和解決方法。
前陣子遇到了 DB 效能的問題才回頭檢視 PostgreSQL index 的基本運作和注意事項。
這篇文章簡單做個記錄,介紹 PG 是如何存放資料、為何加了 index 可以加快查詢速度,以及哪些情況用 index 沒有效果。
實務上經常會遇到程式流程夾雜許多非核心,但又必須得做的行為,例如 logging, auit, notification 或 cache.
這篇文章介紹如何使用 babel decorator plugin 實現 Aspect Object Programming。
將共用的功能抽到 decorator,讓整個流程變的清楚好懂。
上一篇介紹如何解決CommonJS相對路徑問題。假如你偏好ES6的export/import,從NodeJS 12開始支援實驗性質的解決方法。
二個地方需要修改:
"type": "module"
--experimental-modules
或修改package.json的start script以上是不用修改副檔名的方式,否則NodeJS預設只認.mjs
的檔案能使用export/import
接下來介紹 export/import 的基本語法
有二種 export 方式: named 和 default, 一個檔案可以有許多 named export, 但只能有一個 default export
1 | // 以下是 named export |
1 | // 以下是 default export, 注意結尾不加分號 |
named export 會強制使用同樣的名稱 import, 而 default export 可用任意名稱輸入, 例如:1
2
3
4export default str = 'default'; // module1.js
import a from './module1';
console.info(a); // 'default'
如果一個檔案有許多 named export, 如果要選擇部分物件, 則:
1 | // constant.js |
reference:
Node.JS目前有二種方式載入module: CommonJS(也就是本文會介紹的方式)及ES6的import/export。
CommonJS是預設的module載入方式,其使用方式為 require & module.exports
1 | function funcA() { |
1 | const funcA = require('funcA'); |
相信大家對此都不陌生,然而此方法最大的問題是module如果是專案的source file,其require的路徑為相對路徑。假如專案結構有許多階層,在使用上會相當不便