使用IBM Cloud的CodeEngine来处理包含换行符的环境变量

发生的问题

当尝试在通过使用Node.js开发的应用程序上连接认证的Redis服务器时,之前在本地操作可以成功连接的应用程序,在部署到CodeEngine后无法正常连接。
准确地说,在连接时的身份验证失败了。

REDIS_CERTIFICATE="-----BEGIN CERTIFICATE-----
MIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL
...
FTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1
-----END CERTIFICATE-----"
undefined

解决方法

REDIS_CERTIFICATE=-----BEGIN CERTIFICATE-----\nMIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL...\nFTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1\n-----END CERTIFICATE-----

这样,我们去掉了字符串周围的双引号,并将换行符替换为\n。
然后,Node.js读取REDIS_CERTIFICATE,并使用.replace(/\\n/gm, “\n”)进行替换,成功地建立了连接。

考察是吗?

在CodeEngine中换行会被转换为半角空格。
双引号和反斜杠等字符会被作为环境变量的一部分进行转义。

CodeEngine上の環境変数で設定した値アプリケーション側で認識される値
(改行)
(半角スペース)\\\""\"\"\n\\n

只有我觉得难以理解吗?

广告
将在 10 秒后关闭
bannerAds