Javascript 如何将多个js文件中的变量发送到一个ejs文件?

Javascript 如何将多个js文件中的变量发送到一个ejs文件?,javascript,node.js,ejs,Javascript,Node.js,Ejs,我有一个js文件,它向ejs发送了一对变量,并且可以正常工作,但是当我尝试运行另一个js文件的第二个node js进程时,它似乎不会出现在我第二个运行的进程中 我需要做什么才能让ejs文件识别并接收来自第二个js文件的变量 在网页上,我得到的没有定义,它可以追溯到第一个js文件的渲染,即使我是从第二个js文件渲染的 我使用以下代码发送它: app.get('/', (req, res) => { res.render('main', { variable: value }

我有一个js文件,它向ejs发送了一对变量,并且可以正常工作,但是当我尝试运行另一个js文件的第二个node js进程时,它似乎不会出现在我第二个运行的进程中

我需要做什么才能让ejs文件识别并接收来自第二个js文件的变量

在网页上,我得到的
没有定义
,它可以追溯到第一个js文件的渲染,即使我是从第二个js文件渲染的

我使用以下代码发送它:

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

尽我所能添加一个示例

first.js:

var variable1 = value1;

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

var variable2 = value2;

app.get('/', (req, res) => {
   res.render('main', {
   variable2: value2
   }
});
当我加载main.ejs时,它说在first.js中找不到variable2。。为什么它在first.js中查找变量,即使我从second.js传递它

我有first.js,它计算一些变量并将其传递给main.ejs。我还有second.js,它与first.js分开运行,first.js做同样的事情

它不是单独运行的…或者根本不运行

HTTP基于以下简单系统:

  • 客户端(如web浏览器)请求某些内容
  • 服务器(比如基于Express.js的程序)会做出一些响应
  • 这些东西都是单身

    因此,浏览器发送一个
    /
    请求,然后Express查看已注册的路由,直到找到匹配的路由

    它运行该函数并生成响应

    它永远不会到达为同一路由注册的另一个函数:它已经找到了一个允许它提供响应的路由。如果它继续运行并发送另一个响应,那么它将是一个完全不同的EJS脚本执行,并且是一个浏览器不期望的完全不同的响应


    • 为处理
      /
      写一条路线
    • 调用
      render
      一次并向其传递一个包含所需数据的对象
    • 如果希望更易于管理,请将代码拆分为多个函数。其中一个函数可以是路由处理程序本身,它可以调用其他函数并获取它们返回的数据。如果事情变得非常复杂,可以将函数移动到单独的
      require

    您应该实现工作线程,使两个节点进程相互通信

    // 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()
    


    现在还不清楚你想在这里实现什么。尝试提供一个EJS无法识别“文件”中的变量,它只获取传递给它的数据(通过示例中的
    render()
    方法)。不确定您要问什么,但如果页面由单独的进程运行,则需要通过http请求传递数据。否则他们将无法传递数据。对不起,我是node js的新手。我有first.js,它计算一些变量并将其传递给main.ejs。我还有second.js,它与first.js分开运行,first.js做同样的事情。如果我运行first.js,当我从main.ejs加载网页时,它会说second.js中的变量未定义,但它可以追溯到first.js,因此出于某种原因,它会在first.js中查找second.js中的变量。但是它看到了first.js中的变量。非常感谢你,昆汀。这有帮助!
    // 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 })