向正在运行的Node.js进程发送命令

时间:2019-04-08 16:26:47

标签: node.js

我希望Node.js应用程序能够在运行时接受命令。例如,考虑一下Nodemon,您可以在控制台中键入rs重新启动脚本。

我已经考虑过使用process.stdin。因此,我创建了一个永久运行的简单脚本,并每秒在控制台中输出一些文本。我还添加了一些根据process.stdin documentation

改编的代码
setInterval(function () {
  console.log("Process running");
}, 1000);

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  let chunk;
  while ((chunk = process.stdin.read()) !== null) {
    console.log(`data: ${chunk}`);
  }
});

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

当我在控制台中写HelloWorld时,我得到的是: Picture

显然,这不是我想要的。我真的不确定stdin是否是处理命令的正确api,以及我的代码是否有问题?

对此有何看法? 谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用https://www.npmjs.com/package/node-cmd获取命令并在回调中执行操作

答案 1 :(得分:0)

安装pm2模块并运行以下命令

pm2 start <yourjs file> --watch

这将在每次检测到更改时重新启动服务器。

有关其他信息,请参阅文档 https://pm2.io/

答案 2 :(得分:0)

我找到了解决方案。来自{。{3}}的Node.js示例无法正常工作,至少不适用于Node.js v11.13.0。问题似乎位于while循环中。

我对此进行了修改,现在可以使用了。

import os from "os";

setInterval(function () {
  console.log("Process running");
}, 3000);

process.stdin.setEncoding("utf8");


process.stdin.on("readable", function () {
  const chunk = process.stdin.read() as string;
  chunk
    .split(os.EOL)
    .forEach(str => {
      if (str === null || !str.length) {
        return;
      }

      console.log("data: " + str);

    });
});