使用IBM Cloud的CodeEngine来处理包含换行符的环境变量
发生的问题
当尝试在通过使用Node.js开发的应用程序上连接认证的Redis服务器时,之前在本地操作可以成功连接的应用程序,在部署到CodeEngine后无法正常连接。
准确地说,在连接时的身份验证失败了。
REDIS_CERTIFICATE="-----BEGIN CERTIFICATE-----
MIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL
...
FTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1
-----END CERTIFICATE-----"
解决方法
REDIS_CERTIFICATE=-----BEGIN CERTIFICATE-----\nMIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL...\nFTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1\n-----END CERTIFICATE-----
这样,我们去掉了字符串周围的双引号,并将换行符替换为\n。
然后,Node.js读取REDIS_CERTIFICATE,并使用.replace(/\\n/gm, “\n”)进行替换,成功地建立了连接。
考察是吗?
在CodeEngine中换行会被转换为半角空格。
双引号和反斜杠等字符会被作为环境变量的一部分进行转义。
CodeEngine上の環境変数で設定した値アプリケーション側で認識される値
(改行)
(半角スペース)
(改行)
(半角スペース)
\
\\
""
\"\"
\n
\\n
只有我觉得难以理解吗?