【问题标题】:Can nodejs stdout be written to such that the receiving nodejs stdin `on-data` returns individual segments?是否可以写入 nodejs 标准输出,以便接收 nodejs 标准输入“on-data”返回单个段?
【发布时间】:2019-11-19 15:50:20
【问题描述】:

我有一个 nodejs 脚本在更安全的环境中生成一组对象,然后将结果传递给长时间运行的应用程序,我希望这也可以提供一种通过字符串化/解析来传递可迭代对象的方法由 js 完成,并在我的第一个脚本上保持结构透明。

现在我一直在尝试从我的迭代创建一个可读流,或者直接使用process.stdout.write() 编写每个部分,但在这两种情况下,使用process.stdin.on('data', (chunk) => do something with chunk 接收它总是会导致所有字符串组合在一起。

let env = {
   variableString: "somekey",
   someIterable: {
      someOtherValue: ['more values']
   }
}

let streamArr = [];
for (let x in env) {
    let y = env[x].replace(/ {4}/g ,'')
    streamArr.push(JSON.stringify({[x]:y}))
}
// const readable = new Stream.Readable()
// readable.pipe(process.stdout)
streamArr.forEach(item => process.stdout.write(item))
// Receiving script
process.stdin.setEncoding('utf8');
process.stdin.on('data', (chunk) => {
    console.log(chunk)
    let i = JSON.parse(chunk);
    for (let x in i) {
        if(typeof i[x] == 'string') process.env[x] = i[x];
        console.log(x)
    }
});

process.stdin.on('end', () => {
  console.log('end')
});

【问题讨论】:

    标签: node.js stream stdout stdin


    【解决方案1】:

    结束了对这个问题的回避,因为我的数据足够小,我只是将整个对象写入 STDOUT 使用

    process.stdout.write(JSON.stringify(env))
    

    然后使用 fs 模块接收 STDIN,因为这是我发现在其他任何东西运行之前同步使用 STDIN 来初始化环境变量的唯一方法。

    const fs = require('fs')
    const env = (function () {
        let envTmp = fs.readFileSync(0).toString();
        envTmp = JSON.parse(envTmp);
        return envTmp;
    })();
    

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2016-06-13
      • 2011-01-15
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多