javascript - 在 Node 中递归地请求模块

标签 javascript node.js

所以,假设我有两个类,每个类都需要另一个类:

部门.js:

const Person = require("./Person");
class Department{
  constructor(id){
    this.personel = getPersonel(id).map(person => new Person(person));
  }
}

Person.js

const Department = require("./Department");
class Person {
  constructor(id){
    this.department = new Department(getDeptOfPerson(id));
  }
}
const person = new Person(1);
const coworkers = person.department.personel;

现在,这不起作用,我有点明白为什么了。它说“Person”不是 Department.js 的构造函数。但是,如果我将这两个类放在同一个文件中,它就可以正常工作。

所以;我的问题是,我该如何解决这个问题?我真的不想将这两个类保留在同一个文件中——有更好的方法吗?

我正在运行最新版本的 Node。

最佳答案

您可以将初始化对象与获取数据分开:

// types/Department.js
class Department {
  constructor(id, personnel) {
    this.id = id;
    this.personnel = personnel;
  }
}

// types/Person.js
class Person {
  constructor(id, department) {
    this.id = id;
    this.department = department;
  }
}

// findDepartment.js
const Department = require('./types/Department');
const Person = require('./types/Person');

function findDepartment(id) {
  const personnel = getPersonnel(id).map(person => new Person(person));
  return new Department(id, personnel);
}

// findPerson.js
const Department = require('./types/Department');
const Person = require('./types/Person');

function findPerson(id) {
  const department = getDeptOfPerson(id);
  return new Person(id, department);
}

这些甚至可以返回类型 (findDepartment.jsDepartment.js, Department.findDepartment = function (id) { ...)如果你真的想要的话。

关于javascript - 在 Node 中递归地请求模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729564/

相关文章:

node.js - 路径 "{ _id: 5bd587cffb6fc074abb12cb8,\n name:\' 处的值\',\n year:\' name 2\',\n id:\' 4\' }"102 "winner"转换为字符串失败

node.js - Node 无法通过 Docker Compose 连接到 Redis

javascript - float div 无法居中或右对齐

javascript - javascript 中的每个函数调用实际上都是一个新线程吗?

javascript - 使用 Google 文档中的 Google Apps 脚本更改光标所在单词的颜色

node.js - 如何关闭可读流(结束前)?

node.js - sails 外水线如何使用?

javascript - 将 FormData 传递给 AJAX 调用时如何修复 HttpPostedFileBase null

javascript - 取消选中reactjs中的单选按钮

node.js - Webstorm,nodejs, npm test, '.' 不被识别为内部或外部命令,