首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法运行一个自终止的js脚本,将变量传递给下一个?

有没有办法运行一个自终止的js脚本,将变量传递给下一个?
EN

Stack Overflow用户
提问于 2019-11-19 05:04:31
回答 1查看 24关注 0票数 0

我真的希望我的一些秘密/密钥是可迭代的,因为我有越来越多的外部api密钥列表,如果我可以根据使用的路由匹配它们,而不必在应用程序开始时静态地映射它们,那么这些密钥将更容易使用。

我能想到的更好地组织它们而不是在批处理/bash文件中编写大量JSON单行字符串的唯一方法是,将其全部定义在js对象文字中,并使用js脚本对其进行字符串化,然后将其加载到ENV变量中,以传递给即将启动的应用程序。

NPM预启动脚本:

代码语言:javascript
运行
复制
const env = {
  secret: 'supersecret',
  key: `key
  that requires
  line breaks`,
  apiKeys: {
    'api-1':'a;sodhgfasdgflksdaj;lg',
    'api-2':'ajl;sdfj;adjsfkljasd;f'
  }
}

for (let x in env) {
  if (typeof env[x] == 'string') {
    process.env[x] = env[x];
  } else {
    process.env[x] = JSON.stringify(env[x])
  }
  console.log(x)
}

process.exit(22);

NPM启动脚本:

代码语言:javascript
运行
复制
const key = process.env.key
const apiKeys = JSON.parse(process.env.apiKeys)

不幸的是,ENV变量不会在实例之间保留,因此这是无用的。

使用STDIN和STDOUT在两个脚本之间传递数据也是安全的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 03:53:07

我的解决方案最终是通过转换为JSON来管道输出,然后流式传输到STDOUT,并在第二个脚本上接收STDIN。这样做使得它与平台无关,我可以在源脚本中添加任何类型的活动秘密管理(例如,接受来自各种其他秘密管理系统/保险库的秘密,或者在每次启动时生成新的秘密)。

发送到STDOUT:

代码语言:javascript
运行
复制
const env = {
   someSecret: 'supersecret',
   superSecretObject: {
      moreProperties: 'data'
   }
};
/* If you have an array of properties or have a very large set of secrets, 
you should create a readable stream from it, and send that to stdout, 
but this is much simpler */
process.stdout.write(JSON.stringify(env));

Accept on STDIN:

代码语言:javascript
运行
复制
const fs = require('fs')
const env = (function () {
/* Using fs will error out on no input, but you can use process.stdin 
   if you don't need to suspend the whole application waiting for the input */
    let envTmp = fs.readFileSync(0).toString();
    envTmp = JSON.parse(envTmp);
    return envTmp;
})();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58922876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档