【问题标题】:Making variable accessible to other node modules使其他节点模块可以访问变量
【发布时间】:2019-05-03 15:45:32
【问题描述】:

我有一个节点脚本,它也兼作快速服务器。它的目的是运行 cron 作业,但我希望能够通过向快速路由发出请求来查看作业上次运行的时间。

入口点index.js:

require('@babel/register')({

})
import cron from 'node-cron';
import { test } from 'Tasks';

let task = cron.schedule('* * * * *', () =>{
  task.lastruntime = new Date();
  ....
})

require('./server.js')

server.js

import express from 'express';
import bodyParser from 'body-parser';
import http from 'http';

const app = express();

let routes = require('./routes');
app.use(routes);

http.createServer(app).listen(7777, () => console.log("Listening on port 7777!"));

和 routes.js

let router = require('express').Router();
router.get("/test", () => console.log('test'));

module.exports = router;

我想将 index.js 中的 task 提供给 routes.js,以便我可以检查其状态,但我真的不知道该怎么做。如果我把它放在它自己的模块中并将它导入到索引中以启动任务,然后在路由中再次导入它以检查它的状态,我将有两个不同的任务实例都在运行,这不是我想要完成。

【问题讨论】:

  • 如何声明和导出它而不初始化它,而不是只在 index.js 中初始化它?这样您就可以在 routes.js 中获得正确的参考
  • @ShacharHar-Shuv 我不明白,如何获取路线参考?
  • 您的问题是从模块导入两次,实际上两次初始化变量。但是,如果您只是声明变量(或者,创建一个对象来保存它),那么您可以在 index.js 中对其进行初始化,并将其分配给“共享对象”。该对象将保存“任务”对象的引用,该对象仅被初始化一次。

标签: javascript node.js express node-cron


【解决方案1】:

只需 exportimport

task.js

export let task = cron.schedule('* * * * *', () =>{
  task.lastruntime = new Date();
  ....
})

route.js 和 index.js

import { task } from './task.js';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-10-23
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多