Nodejs将相同的启动类共享给子路由

时间:2018-08-25 13:27:02

标签: node.js class inheritance subclass

我有这样的文件夹构造器

.
├── models
│   └── System.js
└── src
    ├── app.js
    ├── index.js
    └── routes
        ├── lemon
        │   ├── auth
        │   │   └── index.js
        │   └── index.js
        └── index.js

/models/System.js

class System {
    constructor() {
        this.test = null;
    }
}

module.exports = System

/src/app.js

const express = require("express");
const _System = require("../models/System");

const app = express();

var System = new _System();
System.test = 1;

//..... other codes

/src/routes/lemon/auth/index.js

const express = require("express");
const _System = require("../../../../models/System");

const router = express.Router();

console.log(_System.test); //returns null

router.get('/', (req, res) => {
    res.send("Hello World");
});

module.exports = router;

我的文件夹构造函数是这样的,我试图将在 /app.js 中定义的 System.test = 1 值共享到 / routes / lemon / auth / index.js 。 但是我无法做到这一点,它总是返回null。

反正有和子路线共享同一个类的初始化吗?

PS:我知道我的代码不正确,我已经搜索了很多东西。我目前对英语资源不太了解,但我确实进行了搜索。

2 个答案:

答案 0 :(得分:0)

这不起作用,因为System.js返回一个类,而不是实例或对象。因此,在var System = new _System(); System.test = 1;中执行app.js时,该实例在应用程序模块本地,并且不与路由共享。

如果要在不同模块之间共享某种配置文件,可以将System模块定义为一个简单对象:

'use strict' // <-- this is good practice to be more rigoreous

const System = {
    test: 1
};

module.exports = System;

答案 1 :(得分:0)

不是最优雅或可扩展的,但是;

global.System =  new _System();

然后您可以在任何地方使用System