Как отправить переменные из нескольких файлов js в один файл e js? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть один js файл, который отправляет пару переменных в e js, и это работает, но когда я пытаюсь запустить второй node js процесс, запускающий другой файл js, кажется, что он не будет посмотрите процесс, который я запускаю второй.

Что мне нужно сделать, чтобы файл e js распознал и получил переменную из второго файла js?

На веб-страницы, я получаю <var> is not defined, и он прослеживается до рендера из первого файла js, хотя я рендеринг его из второго js файла.

Я отправляю его с помощью следующего код:

app.get('/', (req, res) => {
   res.render('main', {
   variable: value
   }
});

редактировать:

Стараюсь изо всех сил добавить пример ...

первый. js:

var variable1 = value1;

app.get('/', (req, res) => {
   res.render('main', {
   variable1: value1
   }
});

секунда. js:

var variable2 = value2;

app.get('/', (req, res) => {
   res.render('main', {
   variable2: value2
   }
});

Когда я загружаю main.e js, он говорит, что сначала не может найти переменную 2. js .. почему он смотрит первым. js для переменной, хотя я передаю ее от секунды. js?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Вы должны реализовать рабочие потоки https://nodejs.org/api/worker_threads.html, чтобы процесс двух узлов взаимодействовал друг с другом

// first.js
const { Worker } = require('worker_threads')

function runProcess (workerData) {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./second.js', { workerData })
    worker.on('message', resolve)
    worker.on('error', reject)
    worker.on('exit', (code) => {
      if (code !== 0) { 
        reject(new Error(`Worker stopped with exit code ${code}`)) 
      }
    })
  })
}

async function run () {
  const result = await runProcess('variable value to send')
  console.log(result)
}

run()

// second.js
const { workerData, parentPort } = require('worker_threads')

parentPort.postMessage({ received: workerData })
0 голосов
/ 07 февраля 2020

У меня есть первое. js, которое вычисляет некоторые переменные и передает их в main.e js. У меня также есть второй. js, который запускается отдельно от первого. js, который делает то же самое.

Он не запускается отдельно ... или вообще.

HTTP основан на простой системе:

  1. Клиент (например, веб-браузер) запрашивает что-то
  2. Сервер (например, ваша программа Express. js) отвечает с чем-то

И это что-то одиночное что-то.

Итак, браузер отправляет запрос на /, а затем Express просматривает зарегистрированные маршрутов, пока не найдет совпадение.

app.get('/', (req, res) => {
   res.render('main', {
   variable1: value1
   }
});

Запускает эту функцию и генерирует ответ.

Она никогда не попадает в другую функцию, зарегистрированную для того же маршрута: Он уже нашел маршрут, который позволил ему дать ответ. Если он продолжит работу и отправит другой ответ, то это будет совершенно другое выполнение сценария E JS и совершенно другой ответ, которого браузер не ожидает.


  • Напишите один маршрут для обработки /.
  • Вызовите render один раз и передайте ему объект с всеми нужными вам данными
  • Разделите код на функции, если хотите упростить управление. Одной из функций может быть сам обработчик маршрута, и он может вызывать другие и получать возвращаемые данные. Если что-то становится действительно сложным, вы можете переместить функции в отдельные модули и require их.
...