创建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
相关产品推荐
相关产品推荐

