Vad*_*dim 8 amazon-web-services node.js amazon-elastic-beanstalk
我正在运行node.js EB容器并尝试将JSON存储在环境变量中.JSON正确存储,但是当通过process.env.MYVARIABLE检索它时,将返回所有双引号被剥离.
例如,MYVARIABLE看起来像这样:
{ "prop": "value" }
当我通过process.env.MYVARIABLE检索它时,它的值是实际的{ prop: value}
,这是无效的JSON.我试图用'\'即{\"prop \":\"value \"}来逃避引号,这只会在字符串返回时添加更多奇怪的行为{\ \"prop\\":\ \"value\\" }
.我也尝试用单引号包装整个东西,例如'{ "prop": "value" }'
,但它似乎也剥离了它们.
任何人都知道如何在环境变量中存储JSON?
编辑:更多信息,当您设置环境变量时,似乎某些字符被双重转义.例如,如果我用单引号包装对象.当我使用sdk获取它时的值变为:
\'{ "prop": "value"}\'
另外,如果我将引号保留,反斜杠会被转义,所以{"url": "http://..."}
当我通过sdk查询对象看起来像结果时{"url": "http:\\/\\/..."}
它不仅会破坏文本,还会重新排列JSON属性,因此属性的显示顺序与我设置的顺序不同.
UPDATE
所以我认为这似乎是AWS中的一个错误,因为它似乎正在破坏提交的值.无论我使用node.js sdk还是Web控制台,都会发生这种情况.作为一种解决方法,我在部署期间用json对象上的单引号替换双引号,然后再在应用程序中再次使用.
使用base64编码
一条重要的字符串正在被自动神奇地破坏。我们不知道EB的内部结构,但我们可以猜测它正在解析JSON。所以不要存储 JSON,而是存储 base64 编码的 JSON:
a = `{ "public": { "s3path": "https://d2v4p3rms9rvi3.cloudfront.net" } }`
x = btoa(a) // store this as B_MYVAR
// "eyAicHVibGljIjogeyAiczNwYXRoIjogImh0dHBzOi8vZDJ2NHAzcm1zOXJ2aTMuY2xvdWRmcm9udC5uZXQiIH0gfQ=="
settings = JSON.parse(atob(process.env.B_MYVAR))
settings.public.s3path
// "https://d2v4p3rms9rvi3.cloudfront.net"
// Or even:
process.env.MYVAR = atob(process.env.B_MYVAR)
// Sets MYVAR at runtime, hopefully soon enough for your purposes
Run Code Online (Sandbox Code Playgroud)
由于这是 JS,所以有关于 UTF8 和节点/浏览器支持的警告,但我认为atob
和btoa
是常见的。文档。
归档时间: |
|
查看次数: |
1084 次 |
最近记录: |