我最近开始学习Node.js.我目前有一个使用Express和FiRestore处理前端请求的后端项目,我正在try 实现类和子类,因为该项目变得越来越大,所以我想对方法进行排序并将它们划分为文件,但由于某些原因,我不能在子类RouteProducts上扩展主类,在本例中是Server.

这就是我到目前为止try 过的:

Index.js:

//Importing subclasses
let RouteProducts = require('./requests/routeProducts.js');

class Server {
    constructor(_app,_db){
        this.app = _app;
        this.db = _db;
        this.initExpress();
        this.start();
    }

    initExpress(){
        this.app.use(express.json());
        this.app.use(cors());
    }

    start(){
        this.app.listen(process.env.PORT, () => console.log("Running on port "+process.env.PORT));
    }
}


module.exports = Server;

//Initializing all classes in order
new Server(express(),config);
new RouteProducts();

RouteProducts.js:

let Server = require('../index.js');
const handleProducts = require('./handleCRUD/handleProducts.js');

class RouteProducts extends Server {
    constructor(_app,_db){
        super(_app,_db);
        this.getAllProducts();
    }

    getAllProducts(){
        _app.get("/read/product/", async (req, res) => {
            await handleProducts.getAllProducts(_db,res);
        });
    }

}

module.exports = RouteProducts;

当我使用npx nodemon index.js运行项目时,我收到以下错误(即使我 comments new RouteProducts();):

class RouteProducts extends Server {
                            ^


TypeError: Class extends value [object Object] is not a constructor or null
    at Object.<anonymous> (C:\Users\Estaniel\Documents\Proyectos\source-shop_back\requests\RouteProducts.js:5:29)
    at Module._compile (node:internal/modules/cjs/loader:1241:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
    at Module.load (node:internal/modules/cjs/loader:1091:32)
    at Module._load (node:internal/modules/cjs/loader:938:12)
    at Module.require (node:internal/modules/cjs/loader:1115:19)
    at require (node:internal/modules/helpers:130:18)
    at Object.<anonymous> (C:\Users\Estaniel\Documents\Proyectos\source-shop_back\Index.js:10:21)
    at Module._compile (node:internal/modules/cjs/loader:1241:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)

Node.js v20.7.0
[nodemon] app crashed - waiting for file changes before starting...

关于这一点我找了很多,但我找不到有什么问题.我把module.exports = Server改成了module.exports = {Server},但这不起作用.

推荐答案

现在的情况是,您有一个循环依赖 struct :index.js需要routeProducts.js,routeProducts.js需要index.js.假设您运行index.js,Node.js看到require()调用并加载routeProducts.js.当Node.js在该文件中看到require('../index.js')时,它不会再次try 加载index.js.(这将导致无限递归.)相反,它返回index.js‘S module.exports,当时还没有赋值给它.有关此行为的详细信息,请参见the docs.

您可以通过将Server类移动到不同的文件或在调用require()之前将其赋值给module.exports来修复此问题.

Node.js相关问答推荐

try 使用Puppeteer抓取Twitter时数组空

序列化事务未按预期工作

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

如何使用NodeJS处理来自请求的单个或多个文件?

MongoDB的方面查询的Postgres类似功能

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

我正在try 在公共目录中使用 Express.js 项目部署 Angular 静态构建

错误:0308010C:try 通过 Github 推送部署到 firebase 托管时出现数字

获取用户 ID 后,Firebase 函数 onCreate 方法在 Firestore 上不起作用

mongoose.model() 方法返回未定义

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

部署云功能 Firebase/Stripe 时出错

Sharp JS 依赖关系 destruct 了 Elastic Beanstalk 上的 Express Server

node_modules 中 .bin 文件夹的用途是什么?

如何在 Node.js 中逐字节读取二进制文件

Node JS:自动 Select `http.get`与`https.get`

Node.JS 中的基本 HTTP 身份验证?

Node.js 应用程序有周期性的缓慢和/或超时(不接受传入的请求)

如何在express 中设置默认路径(路由前缀)?

找不到在 docker compose 环境中运行的 node js 应用程序的模块