我正在为web应用程序制作api,当我尝试导入模块时遇到了一个奇怪的问题。我有一个文件夹,其中有一组用于从数据库获取数据的模型,还有一个名为“global”的文件夹,其中有整个项目中使用的各种模块。
/
/api
/models
/Users.js
/Trainings.js
/TrainingsTypes.js
/TrainingsSubtypes.js
/global
/Functions.js
一些模型导入其他模型以检查id、获取数据等。我在中创建了一个函数 Functions.js
这也需要一些模型来发挥作用。因此,导入依赖项基本上如下所示:
我必须承认,这样的表演有点糟糕。但这是我的问题。只要 Functions.js
不重要 Users.js
,一切都很好。api运行良好,根本没有崩溃。但是,如果我进口 Users.js
在里面 Functions.js
,我立即得到这个错误:
ReferenceError: Cannot access 'Users' before initialization
at file:///C:/Users/USERNAME/Desktop/project-api/global/Functions.js:30:10
at ModuleJob.run (internal/modules/esm/module_job.js:169:25)
at async Loader.import (internal/modules/esm/loader.js:177:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
下面是functions.js的代码(我在第30行添加了注解):
import check from "checkers";
import Users from "../api/models/Users.js";
import Trainings from "../api/models/Trainings.js";
import TrainingsTypes from "../api/models/TrainingsTypes.js";
import TrainingsSubtypes from "../api/models/TrainingsSubtypes.js";
/*****************************************************
* SQL Queries
*****************************************************/
export function fieldsToUpdate(fields) {...}
const fillers = {
"user": Users, // Line 30
"trainer": Users,
"type": TrainingsTypes,
"subtype": TrainingsSubtypes
};
export async function fillIDs(db, response) {...}
此外,导入本身不会导致问题。如果我删除 Users
从 fillers
物体,仍然没有碰撞。我已经看到这可能是一个循环依赖性问题,但有人说节点可以处理这个问题。我必须补充一点,我真的需要我所有的模型 fillIDs()
因此,我无法删除所有导入,也不想在每个模型中复制/粘贴此代码。一定有解决办法,但我需要一些帮助。
你知道怎么解决这个问题吗?谢谢
编辑1: Users.js
导入这些模块:
import bcrypt from "bcryptjs";
import generatePwd from "generate-password";
import { v4 as uuidv4 } from "uuid";
import check from "checkers";
import { fieldsToUpdate, fillIDs } from "../../global/Functions.js";
import { arrayToSerialComma } from "../../global/Converters.js";
import APIResp from "../../global/APIResp.js";
import Mailer from "../../global/Mailer.js";
import Genders from "./Genders.js";
import Roles from "./Roles.js";
import Tokens from "./Tokens.js";
import { Passwords } from "../../config/config.js";
暂无答案!
目前还没有任何答案,快来回答吧!