“无法在初始化之前访问modulename”使用导入

2o7dmzc5  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(225)

我正在为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) {...}

此外,导入本身不会导致问题。如果我删除 Usersfillers 物体,仍然没有碰撞。我已经看到这可能是一个循环依赖性问题,但有人说节点可以处理这个问题。我必须补充一点,我真的需要我所有的模型 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";

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题