Node.js需要带有构造函数参数的类

MyM*_*ial 9 javascript node.js

我上课了

class advertHandler {
    constructor(projects) {
        this.projects = projects;
    }

    getProject(name) {
        return this.projects[name];
    }
}


module.exports = new advertHandler(projects);
Run Code Online (Sandbox Code Playgroud)

当我尝试像这样使用它

const advertHandler = require('./advertHandler')(projectsArray);
advertHandler.getProject('test');
Run Code Online (Sandbox Code Playgroud)

并抛出一个异常,require is not a function但没有构造函数,一切都很好,所以问题是如何使用带有require的类构造函数?

T.J*_*der 21

它并不是说require不是一个功能,它说require(...)的不是功能.:-)你试图调用结果require(...),但是你导出的东西(一个实例advertHandler)不是一个函数.还要注意advertHandler.js,你在尝试使用全局调用projects(在最后一行); 理想情况下,最好在NodeJS应用程序中使用全局变量来避免它.

您只想导出该类:

module.exports = advertHandler;
Run Code Online (Sandbox Code Playgroud)

......然后在调用它之前可能需要它:

const advertHandler = require('./advertHandler');
const handler = new advertHandler({test: "one"});
console.log(handler.getProject('test'));
Run Code Online (Sandbox Code Playgroud)

例如:

advertHandler.js:

class advertHandler {
    constructor(projects) {
        this.projects = projects;
    }

    getProject(name) {
        return this.projects[name];
    }
}

module.exports = advertHandler;
Run Code Online (Sandbox Code Playgroud)

app.js:

const advertHandler = require('./advertHandler');
const handler = new advertHandler({test: "one"});
console.log(handler.getProject('test'));
Run Code Online (Sandbox Code Playgroud)

  • @A-letubby:是的,但可读性较差:`const handler = new (require('./advertHandler'))({test: "one"});`(注意 `require` 周围的 `()`称呼)。 (3认同)