Выполнение скрипта узла с помощью child_process

#javascript #c #node.js #child-process

#javascript #c #node.js #дочерний процесс

Вопрос:

У меня есть простой index.js файл узла, который использует источник событий для передачи данных каждые две секунды. В этом файле я экспортирую ссылку на источник события, поскольку я хочу использовать его в другом файле user.js . Когда я запускаю index.js все работает так, как и ожидалось. Затем, когда я открываю другой ternimal и запускаю user.js он записывает данные на консоль.войдите, как и ожидалось. Что я хотел бы сделать, так это после того, как я создам это событие, создать новый процесс, который будет запускать user.js файл и считывает его выходные данные на текущий терминал вместо того, чтобы использовать отдельные терминалы для получения результата.

index.js

 const { EventEmitter } = require('events');
const { spawnSync, spawn } = require('child_process');

const user = { id: 1, name: 'John Doe'}

const myEvent = new EventEmitter();
setInterval(() => {
    myEvent.emit('save-user', user);
}, 2000);
;
exports.emitter = myEvent;

 

user.js

 const newEvent = require('./index')
const userEmitter = newEvent.emitter;

userEmitter.on('save-user', (user) => {
    console.log('Saving user data', user);
})
 

Ответ №1:

Здесь немного другой подход: вы можете запустить user.js как родитель и иметь index.js в дочернем процессе.

User.js

 const newEvent = require("./index");
const { spawn } = require("child_process");

const userEmitter = newEvent.emitter;

userEmitter.on("save-user", (user) => {
  console.log("Saving user data", user);
});

spawn("node", ["./index.js"]);
 

index.js

 const { EventEmitter } = require("events");

const user = { id: 1, name: "John Doe" };

const myEvent = new EventEmitter();
setInterval(() => {
  myEvent.emit("save-user", user);
}, 2000);

exports.emitter = myEvent;
 

Затем запустите node user.js