You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建JavaScript类实例时触发TypeError:Server is not a function

问题原因及解决办法

1. 核心错误:未正确导出Server类

Node.js的CommonJS模块系统中,模块内的变量默认不会对外暴露,你必须手动导出Server类,否则require("./server.js")得到的是一个空对象,自然无法当作构造函数实例化,这就是你遇到TypeError: Server is not a function的根本原因。

修改server.js,在文件末尾添加导出语句:

module.exports = Server;

2. 其他代码问题(修复后才能正常运行)

除了导出问题,你的代码还有几处逻辑错误:

  • setStaticDirectory方法:
    • 你用了this.app,但类里定义的是私有字段#app,需改为this.#app
    • 未引入express模块,要在文件顶部添加const express = require('express');,否则express.static会报错
  • init方法:
    • listen(port)里的port未指向类的私有字段,需改为this.#port

修复后的server.js完整代码:

const express = require('express');

class Server {
    #app;
    #port;
    constructor(port) {
        this.#port = port;
        this.#app = express();
    }
    setStaticDirectory(directory) {
        this.#app.use(express.static(directory));
    }

    init() {
        console.log(this.#app.listenerCount);
        this.#app.listen(this.#port, () => {
            console.log(`Server running on port ${this.#port}`);
        });
    }
}

module.exports = Server;

3. C#与Node.js模块的差异说明

你有C#开发背景,这里需要明确:C#中类默认在命名空间内可被访问,但Node.js的模块是完全隔离的,必须显式导出才能让其他模块引用,这和C#的程序集引用逻辑不同,是你容易遗漏的点。

内容的提问来源于stack exchange,提问作者WDUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:14:53