我有以下代碼來訪問秘密管理器
export interface ConfigData {
dbname:string;
dbuser:string;
}
我在秘密管理器中使用 json 資料,例如
{
"dbname" : "dbname",
"dbuser" : "dbuser"
}
功能
private static async fetchSecretData(){
let config_key = 'projects/xx/xx/xx/versions/latest';
const client = new SecretManagerServiceClient();
const [version] = await client.accessSecretVersion({name:config_key})
console.log(version.payload?.data )
return version.payload?.data?.toString() as unknown as ConfigData;
}
但我需要將其轉換為未知的 ConfigData,
我想在不讓它未知的情況下投射這個 ConfigData。
如果沒有替代方法可以做到這一點,那么從這個未知物件中獲取密鑰的最佳選擇是什么。
謝謝
uj5u.com熱心網友回復:
兩點說明:
toString()將回傳string任何data內容的表示,因此將其轉換為任何其他型別是行不通的。- 看起來
SecretManagerServiceClient是的一部分,谷歌云秘密管理器API。您不必為這些提供自己的型別,因為@google-cloud/secret-manager包已經帶有自己的型別定義。 - 從這個包中,我可以看出有效載荷的型別是這樣的:
/** Properties of a SecretPayload. */
interface ISecretPayload {
/** SecretPayload data */
data?: (Uint8Array|string|null);
}
對我來說,這data應該是什么還不是很清楚。如果它是一個 JSON 字串,那么你需要決議它,JSON.parse(version.payload.data)然后附加 as ConfigData到它,讓 TypeScript 知道輸出的形狀。如果是Uint8Array,.toString則在使用JSON.parse.
所以你會得到類似的東西:
private static async fetchSecretData() {
let config_key = 'projects/xx/xx/xx/versions/latest';
const client = new SecretManagerServiceClient();
const [version] = await client.accessSecretVersion({name:config_key})
if(version?.payload?.data) {
return JSON.parse(version.payload.data) as ConfigData
} else {
return null;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363937.html
標籤:javascript 打字稿 谷歌云平台
