【问题标题】:Node.js: Requiring a class does not workNode.js:需要一个类不起作用
【发布时间】:2016-11-24 14:03:58
【问题描述】:

您好,我正在尝试使用 es6 类创建 node.js 服务器。 由于某些原因,要求我的服务器类不起作用,我无法弄清楚它为什么不起作用。

PS:要求配置按预期工作。

节点版本: 5.7.0

Server.js:

"use strict"
const express = require('express')
const path = require('path')



class Server {

    constructor(configuration) {
        this.title = "Points Dashboard";
        this.app = express();
        this.configureAuthentication(configuration)
    }

    listen(port, callback) {
        this.app.listen(port, callback);
    }
}

module.exports = Server;

app.js:

"use strict"

const configuration = require('./lib/configuration');
const Server = require('./lib/Server')

const server = new Server(configuration)

server.listen(configuration.server.public_port, () => {
    console.log(`Server running on ${configuration.server.public_url}, internal port ${configuration.server.public_port}`)
})

错误:

TypeError:服务器不是函数

...调用堆栈

在对象。 (/root/app.js:6:16)

项目结构:

调试日志:

【问题讨论】:

  • server.js 在 currentdir/lib 中吗?
  • @Karim 是的,因为配置和服务器都在 lib 中并且需要配置工作
  • 你试过调试Server等于什么?
  • @estus 是的,我得到了一个普通的对象。我添加了一个调试屏幕截图。
  • configureAuthentication 来自哪里?看起来它没有定义。

标签: javascript node.js ecmascript-6


【解决方案1】:

最后我发现了错误,这确实是一个愚蠢的错误。 我上面发布的代码是正确的。我在这个问题中没有提到的是,我正在使用 docker。在编写我的 docker 文件时,我忘记添加一行以将本地机器上的代码与容器内运行的代码同步。在我创建容器时,我忘记添加 module.exports = Server; 这就是 require 不起作用的原因。

我正在使用 Visual Studio 代码在 docker 容器中调试我的代码,但由于我从未更改 app.js 中的某些内容,因此我看不到容器内运行的代码与我的本地代码不同。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2021-01-06
    • 2011-08-02
    • 1970-01-01
    相关资源
    最近更新 更多