前情提要&遭遇問題
nestJs 是一個以express為基礎的後端框架,該框架可以選擇gRPC實作MicroService,並撰寫proto作為溝通介面,作為server來說,可以成功透過接收到資料,不過根據proto3三特性,選填、永不null、初始化給預設值,因此導致一情況,null欄位會消失,GET資料,null 欄位直接消,PATCH資料,null欄位送到server端一樣消失
補充:
研究歷程
解決方案
User Entity
{
"name":string
"phone":string
"age":number
"isVip":boolean
"createdAt":Datetime
"contactInfo":{ //for 支援jsonDB
"address":string
"email":string
}
}
//針對 Patch 資料情境(只送需要更新欄位)
//1. endpoint 解析 FE request 找出 null 的欄位,記錄下來,繼續往microService丟
//2. 針對巢狀資料,需要一次送全部並字串化,因為在DB 是單一 column
-- FE 傳送的req
{
"name":"王小明"
"phone":null
"age":number
"isVip":boolean
"createdAt":null
"contactInfo":{
"address":null
"email":"e@xample.com"
}
}
-- endpoint 傳給 microService 結構
{
"name":"王小明"
"phone":null
"age":number
"isVip":boolean
"createdAt":null
"contactInfo":'{"address":null,"email":"e@xample.com"}' //巢狀結構字串化
+ "setNullProperty":["phone","createdAt"] //直接紀錄需要null欄位
}
--proto
message patchUser{
repreated string setNullProperty = 1
string name = 2
string phone = 3
number age = 4
boolean isVip = 5
string contactInfo = 6
}
ref:
Documentation | NestJS - A progressive Node.js framework